POJ 1274 典型的最大匹配 匈牙利算法
http://poj.org/problem?id=1274
题意:奶牛只在一个或几个圈只中产奶,一个圈只可以有一头牛,问最多几头牛产奶
典型的最大匹配 匈牙利算法
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
bool map[202][202],visit[202];
int link[202];
int n,m;
bool dfs(int u)
{
int i;
for(i=1;i<=m;i++)
{
if(map[u][i]&&(!visit[i]))
{
visit[i]=true;
if(link[i]==-1||dfs(link[i]))
{
link[i]=u;
return true;
}
}
}
return false;
}
int main()
{
int i,j,k,sum;
while(~scanf("%d%d",&n,&m))
{
memset(map,0,sizeof(map));
for(i=1;i<=n;i++)
{
scanf("%d",&j);
while(j--)
{
scanf("%d",&k);
map[i][k]=true;//没有map[k][i]=1
}
}
sum=0;
memset(link,-1,sizeof(link));
for(i=1;i<=n;i++)
{
memset(visit,0,sizeof(visit));
if(dfs(i))sum++;
}
printf("%d\n",sum);
}
return 0;
}