1<=N 和M<=500.接下来的K行,每行有两个数,分别表示女生Ai愿意和男生Bj做partner。最后一个0结束输入。
6 3 3 1 1 1 2 1 3 2 1 2 3 3 1 0
3
想法:
二分图最大匹配
代码:
#include<stdio.h>
#include<string.h>
int e[1010][1010];
int boy[1010],girl[1010];
int book[1010];
int n,x,y;
int dfs(int m)
{
int i;
for(i=1;i<=y;i++)
{
if(book[i]==0&&e[m][i]==1)
{
book[i]=1;
if(girl[i]==-1 || dfs(girl[i]) )
{
boy[m]=i;
girl[i]=m;
return 1;
}
}
}
return 0;
}
int main()
{
while(scanf("%d",&n),n)
{
int i,j,t;
int t1,t2,sum=0;
memset(boy,-1,sizeof(boy));
memset(girl,-1,sizeof(girl));
memset(e,0,sizeof(e));
scanf("%d %d",&x,&y);
for(i=1;i<=n;i++)
{
scanf("%d %d",&t1,&t2);
e[t1][t2]=1;
}
for(i=1;i<=x;i++)
{
if(boy[i]==-1)
{
memset(book,0,sizeof(book));
if(dfs(i))
sum++;
}
}
printf("%d\n",sum);
}
return 0;
}