poj1274:http://poj.org/problem?id=1274
题意:有n个奶牛和m个谷仓,现在每个奶牛有自己喜欢去的谷仓,并且它们只会去自己喜欢的谷仓吃东西,问最多有多少奶牛能够吃到东西
题解:裸的二分图匹配,直接上匈牙利。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=;
int n,m,k,w,u,v;
int cy[MAXN];
bool visit[MAXN];
bool g[MAXN][MAXN];
int path(int u){
for(int i=;i<=m;i++){
if(!visit[i]&&g[u][i]){
visit[i]=;
if(cy[i]==-||path(cy[i])){
cy[i]=u;
return ;
}
}
}
return ;
}
int maxmatch(){
memset(cy,-,sizeof(cy));
int res=;
for(int i=;i<=n;i++){
memset(visit,,sizeof(visit));
res+=path(i);
}
return res;
}
int main(){
while(~scanf("%d%d",&n,&m)&&n){
memset(g,,sizeof(g));
for(int i=;i<=n;i++){
scanf("%d",&k);
while(k--){
scanf("%d",&w);
g[i][w]=;
} }
printf("%d\n",maxmatch());
}
}