链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063
#include <stdio.h>
#include <string.h>
int map[505][505];
int book[505];
int match[505];
int K,M,N;
int dfs(int u)
{
int i;
for(i = 1; i <= N; ++i)
{
if(!book[i] && map[u][i])
{
book[i] = 1;
//如果该男生还未匹配女生或者该男生匹配的女生可以找到别的男生
if(!match[i] || dfs(match[i]))
{
//记录已经匹配的男生和女生
match[i] = u;
return 1;
}
}
}
return 0;
}
int main()
{
int t1,t2,i,sum;
while(scanf("%d",&K) && K)
{
sum = 0;
scanf("%d %d",&M,&N);
memset(match,0,sizeof(match));
memset(map,0,sizeof(map));
for(i = 0; i < K; ++i)
{
scanf("%d %d",&t1,&t2);
//开始的女生和男生的匹配
map[t1][t2] = 1;
}
for(i = 1; i <= M; ++i)
{
memset(book,0,sizeof(book));
if(dfs(i))
++sum;
}
printf("%d\n",sum);
}
return 0;
}