1894 完美的牛栏
当然这是一个模板题,没什么好解释的,二分图的代码非常的短
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
const int N=201;
int n,m,lk[N],g[N][N],v[N],ans;
bool dfs(int now)
{
for(int i=1;i<=n;i++)
if(!v[i]&&g[now][i]&&(v[i]=1))
if((!lk[i] || dfs(lk[i])) && (lk[i]=now))return 1;//不冲突就搜索,然后赋值颜色
return false;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1,s,x;i<=n;i++)
{
scanf("%d",&s);
while(s--)
{
scanf("%d",&x);
g[i][x]=1;//标记牛棚
}
}
for(int i=1;i<=n;i++)
memset(v,0,sizeof(v)),ans+=dfs(i);//加上所有的答案
printf("%d",ans);
return 0;
}