POJ 1274 The Perfect Stall(二分图最大匹配)

题目链接:http://poj.org/problem?id=1274

题目大意:在一个农场里面有N只母牛和M个牛棚,每个母牛只有在自己喜欢的牛棚里面才会产奶,给出每个母牛喜欢的牛棚的编号,问如何安排才能使母牛产奶更多,即让尽可能多的母牛在自己喜欢的牛棚里面

解题思路:此题为典型的二分图最大匹配问题。可以采用匈牙利算法。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
int v[210];int t[210];
vector<int> s[210];
int fun(int x)
{
	for(int i=0;i<s[x].size();i++)
	{
		if(!v[s[x][i]])
		{
			v[s[x][i]]=1;
			if(t[s[x][i]]==0||fun(t[s[x][i]]))
			{
				t[s[x][i]]=x;return 1;
			}
		}
	}
	return 0;
}
int main()
{
	int m,n;
	while(cin>>m>>n)
	{
		memset(t,0,sizeof(t));
		for(int i=0;i<210;i++)s[i].clear();
		for(int i=1;i<=m;i++)
		{
			int a;cin>>a;
			while(a--)
			{
				int b;cin>>b;s[i].push_back(b);
			}
		}
		int sum=0;
		for(int i=1;i<=m;i++)
		{
			memset(v,0,sizeof(v));
			if(fun(i))sum++;
		}
		cout<<sum<<endl;
	}
}


你可能感兴趣的:(POJ 1274 The Perfect Stall(二分图最大匹配))