#include<stdio.h>
int n,m;
int match[200+16];
int vis[200+16],map[200+16][200+16];
int dfs(int x)
{
int i;
for(i=1;i<=n;i++)
{
if(map[x][i]&&!vis[i])
{
vis[i]=1;
if(match[i]==-1||dfs(match[i]))
{
match[i]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int i,res,a,q;
while(~scanf("%d%d",&n,&m))
{
memset(map,0,sizeof(map));
for(i=1;i<=n;i++)
{
scanf("%d",&q);
while(q--)
{
scanf("%d",&a);
map[i][a]=1;
}
}
res=0;
memset(match,-1,sizeof(match));
for(i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
if(dfs(i))
res++;
}
printf("%d\n",res);
}
}
poj 1274 匈牙利算法
最新推荐文章于 2018-10-07 11:56:38 发布