二分图匹配基础题。。。
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<vector>
#include<queue>
#include<map>
#include<stack>
using namespace std;
const int maxn = 550;
const int maxm = 1010;
int numBoy,numGirl,m,v[maxm],first[maxn],next[maxm],link[maxn];
bool vis[maxn];
bool find(int u){
for(int i=first[u];i!=-1;i=next[i])
if(!vis[v[i]]){
vis[v[i]]=true;
if(link[v[i]]==-1||find(link[v[i]])){
link[v[i]]=u;
return true;
}
}
return false;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("a.in", "r", stdin);
#endif
while(cin>>m,m){
cin>>numGirl>>numBoy;
memset(first,-1,sizeof(first));
for(int i=0;i<m;i++){
int u;
cin>>u>>v[i];
next[i]=first[u];
first[u]=i;
}
memset(link,-1,sizeof(link));
int ans=0;
for(int i=1;i<=numGirl;i++){
memset(vis,false,sizeof(vis));
if(find(i)) ans++;
}
cout<<ans<<endl;
}
return 0;
}