题目:http://acm.hdu.edu.cn/showproblem.php?pid=2063
分析:裸二分图最大匹配问题
代码:
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
const int Tmax=505;
int ngirl,m,nboy,s[Tmax],ans;
bool v[Tmax],map[Tmax][Tmax];
bool dfs(int x)
{
int i;
for(i=1;i<=nboy;i++)
{
if(!v[i]&&map[x][i])
{
v[i]=true;
if(s[i]==0||dfs(s[i]))
{
s[i]=x;
return true;
}
}
}
return false;
}
int main()
{
int i,u,vv;
while(scanf("%d",&m)==1&&m!=0)
{
scanf("%d%d",&ngirl,&nboy);
ans=0;
memset(map,0,sizeof(map));
memset(s,0,sizeof(s));
for(i=1;i<=m;i++)
{
scanf("%d%d",&u,&vv);
map[u][vv]=true;
}
for(i=1;i<=ngirl;i++)
{
memset(v,0,sizeof(v));
if(dfs(i)) ans++;
}
printf("%d\n",ans);
}
return 0;
}