#include <cstdio>
#include <iostream>
using namespace std;
const int N=502;
int map[N][N],n,match[N];
bool visited[N];
int find (int x){
for (int i=0;i<n;i++){
if (!visited[i] && map[x][i]){
visited[i]=1;
if (match[i]==-1 || find(match[i])){
match[i]=x;
return true;
}
}
}
return false;
}
int main (){
while (cin>>n){
int num,x,y;
memset (map,0,sizeof (map));
memset (match,-1,sizeof (match));
for (int j=0;j<n;j++){
scanf ("%d: (%d)",&x,&num);
for (int i=0;i<num;i++){
cin>>y;
map[x][y]=1;
}
}
int cnt=0;
for (int i=0;i<n;i++){
memset (visited,0,sizeof (visited));
if (find(i))
cnt++;
}
printf ("%d\n",n-cnt/2); //最大独立集 = V - 最大匹配数
}
return 0;
}
杭电1068二分图匹配
最新推荐文章于 2020-08-06 00:01:13 发布