1<=N 和M<=500.接下來的K行,每行有兩個數,分別表示女生Ai願意和男生Bj做partner。最後一個0結束輸入。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int map[1100][1100];
int used[1100];
int endd[1100];
int k,n,m;
int dfs(int x)
{
int i;
for(i=1;i<=m;i++)
{
if(map[x][i]==1&&!used[i])
{
used[i]=1;
if(endd[i]==-1||dfs(endd[i]))//沒有匹配或已經匹配的女生還能與其他人匹配
{
endd[i]=x;
return 1;
}
}
}
return 0;
}
int main()
{
while(scanf("%d",&k),k)
{
scanf("%d%d",&n,&m);
int i,j;
memset(endd,-1,sizeof(endd));
memset(map,0,sizeof(map));
int a,b;
for(i=1;i<=k;i++)
{
scanf("%d%d",&a,&b);
map[a][b]=1;
}
int num=0;
for(i=1;i<=n;i++)
{
memset(used,0,sizeof(used));//每次查找都要重置
if(dfs(i))
num++;
}
printf("%d\n",num);
}
return 0;
}