题目链接: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;
}
}