#include<stdio.h>
#include<string.h>
int link[501][510],b[501],u[501];
int f(int x,int m)
{
int i;
for(i=1;i<=m;i++)
{
if(link[x][i]==1&&u[i]==0)
{
u[i]=1;
if(b[i]==0||f(b[i],m))//在自己本来配对的男生被更挑剔的女生占用的条件下,
{//还能不能找到其他男生跟自己配对,如果不能,那这个更挑剔的女生就找不到配对了
b[i]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int i,k,x,y,sum,m,n;
while(1)
{
scanf("%d",&k);
if(k==0)break;
scanf("%d%d",&n,&m);
memset(link,0,sizeof(link));//清零
memset(b,0,sizeof(b));
memset(u,0,sizeof(u));
for(i=0;i<=k-1;i++)
{
scanf("%d%d",&x,&y);
link[x][y]=1;
}
sum=0;
for(i=1;i<=n;i++)
{
memset(u,0,sizeof(u));
if(f(i,m)) sum++;
}
printf("%d\n",sum);
}
return 0;
}
学到了新东西,主要思想就是注释中写的