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;
}



posted @ 2011-12-03 23:56  快乐.  阅读(222)  评论(0编辑  收藏  举报