#include<iostream>
#include<cstdio>
#define N 1002
using namespace std;
int k,n,m;
int map[N][N];
int girls[N];//女孩标记
int boys[N];//男孩标记
int find(int x)
{
for(int i = 1;i<=m;i++){
if(boys[i]==0&&map[i][x]){//男孩还没询问这个姑娘,但现在找到了
boys[i]=1;
if(girls[i]==-1||find(girls[i])){//若该女孩还没有找到男的,或者i心仪的男生找到了其他人
girls[i] = x;
return 1;
}
}
}
return 0;
}
int main(){
int a,b;
while(scanf("%d",&k)!=EOF&&k!=0){
scanf("%d%d",&m,&n);
memset(map,0,sizeof(map));//初始化
memset(girls,-1,sizeof(girls));
for(int i = 0;i<k;i++){
scanf("%d%d",&a,&b);
map[a][b]=1;//表示有意
}
int count=0;
for(int i = 1;i<=n;i++){//男生主动
memset(boys,0,sizeof(boys));//每一次男生配对时都要先初始化
if(find(i))
count++;
}
printf("%d\n",count);
}
}
杭电2063,最大配对
最新推荐文章于 2021-10-10 11:36:18 发布