#include <cstring>
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const int N =1e5;
int n;
int h[N], e[N], ne[N], idx;
int match[N];
bool st[N];
void add(int a, int b) {
e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}
bool find(int x) {
for (int i = h[x]; i != -1; i = ne[i]) {//枚举所有看上的
int j = e[i];
if (!st[j]) {//如果没考虑过
st[j] = true;//表示考虑过了
//如果这个妹子还没匹配其他男生 ,或者说虽然已经匹配了,但可以给那个男生找到下家
if (match[j] == -1 || find(match[j])) {
match[j] = x;
return true;
}
}
}
return false;
}
int main() {
while(scanf("%d",&n)!=EOF&&(n)) {
idx=0;
memset(h, -1, sizeof h);
memset(match,-1,sizeof(match));
for(int i=0;i<n;i++)
{
int x,num;
scanf("%d: (%d)",&x,&num);
while(num--)
{
int y;
scanf("%d",&y);
add(x,y);
add(y,x);
}
}
int res = 0;//匹配的数量
for (int i = 0; i < n; i ++ ) {//依次看每个男生
memset(st, false, sizeof st);//先把所以的妹子清空,表示都还没考虑过
if (find(i))
res ++ ;//如果成功过找到,就加一
}
printf("%d\n", n-res/2);
}
return 0;
}
Girls and Boys HDU - 1068
猜你喜欢
转载自www.cnblogs.com/QingyuYYYYY/p/12387455.html
今日推荐
周排行