/************************************************ Author :DarkTong Created Time :2016/7/31 15:38:05 File Name :Poj_2339.cpp *************************************************/ //#include <bits/stdc++.h> #include <cstdio> #include <cstring> using namespace std; #define max(a, b) a>b?a:b const int maxn = 300+10; int w[maxn][maxn], Left[maxn], n, m; bool used[maxn]; bool match(int j) { for(int i=1;i<=n;++i)if(w[i][j]&&!used[i]) { used[i]=true; if(!Left[i]||match(Left[i])) { Left[i]=j; return true; } } return false; } int hungary() { int res=0; memset(Left, 0, sizeof(Left)); for(int i=1;i<=m;++i) { memset(used, 0, sizeof(used)); if(match(i)) res++; } return res; } int main() { int T, cas=1; while(scanf("%d", &m)==1) { memset(w, 0, sizeof(w)); int p, q, t; for(int i=1;i<=m;++i) { scanf("%d", &t); for(int j=1;j<=t;++j) { scanf("%d%d", &p, &q); w[(p-1)*12+q][i]=1; n = max((p-1)*12+q, n); } } printf("%d\n", hungary()); } return 0; }
时间: 2024-11-08 21:59:19