http://acm.hdu.edu.cn/showproblem.php?pid=2063
#include <bits/stdc++.h>
using namespace std;
const int maxn=505;
int connect[maxn][maxn],used[maxn],nxt[maxn];//nxt存储男孩配成功的女孩
int k,m,n,a,b;
bool find(int x){
for(int i=1;i<=n;i++){
if(connect[x][i]&&!used[i]){
used[i]=1;
if(nxt[i]==0||find(nxt[i])){
nxt[i]=x;
return true;
}
}
}
return false;
}
int match(){
int sum=0;
for(int i=1;i<=m;i++){
memset(used,0,sizeof(used));//used表示每次找对应男孩时,某男孩是否被找过
if(find(i)) sum++;
}
return sum;
}
int main(){
ios::sync_with_stdio(false);
while(cin>>k){
if(!k) break;
memset(connect,0,sizeof(connect));
memset(nxt,0,sizeof(nxt));
cin>>m>>n;
for(int i=0;i<k;i++){
cin>>a>>b;
connect[a][b]=1;
}
cout<<match()<<endl;
}
}