题目链接:http://poj.org/problem?id=1274
Description
Input
Output
Sample Input
5 5 2 2 5 3 2 3 4 2 1 5 3 1 2 5 1 2
Sample Output
4
Source
题意:
有n头牛,m个谷仓,并且每头牛有自己喜欢的谷仓,它们只去自己喜欢的谷仓吃食物,问最多能有多少头牛能吃到食物!
代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
#define MAXN 517
int N;
int LN, RN;
int g[MAXN][MAXN];
int linker[MAXN];
bool used[MAXN];
int dfs(int L)//从左边开始找增广路径
{
for(int R = 1 ; R <= RN ; R++ )
{
if(g[L][R] && !used[R])
{
//找增广路,反向
used[R]=true;
if(linker[R] == -1 || dfs(linker[R]))
{
linker[R]=L;
return 1;
}
}
}
return 0;
}
int hungary()
{
int res = 0 ;
memset(linker,-1,sizeof(linker));
for(int L = 1; L <= LN; L++)
{
memset(used,0,sizeof(used));
if(dfs(L))
res++;
}
return res;
}
int main()
{
int n, m;
int tt, k;
while(~scanf("%d%d",&n,&m))
{
memset(g,0,sizeof(g));
for(int i = 1; i <= n; i++)
{
scanf("%d",&k);
for(int j = 1; j <= k; j++)
{
scanf("%d",&tt);
g[i][tt] = 1;
}
}
LN = n;
RN = m;
int ans = hungary();
printf("%d\n",ans);
}
return 0;
}
POJ 1274 The Perfect Stall(二分匹配 最大匹配数)
原文:http://blog.csdn.net/u012860063/article/details/39184577