http://blog.csdn.net/lyy289065406/article/details/6646007
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
int K,N;
int visit[55000];
int tot;
vector<int> coll[55000];//原本开小runtime error了,所以就开了个大的,ac了。
int from[55000];
bool match(int x){
for(int i=0;i<coll[x].size();++i)
if(!visit[coll[x][i]]){
visit[coll[x][i]]=true;
if(from[coll[x][i]]==-1||match(from[coll[x][i]])){
from[coll[x][i]]=x;
return true;
}
}
return false;
}
int hungary(){
tot=0;
memset(from,255,sizeof from);
for(int i=1;i<=N;++i){
memset(visit,0,sizeof visit);
if(match(i))
++tot;
}
return tot;
}
int main(){
while(cin>>N>>K){
for(int i=1;i<=K;i++){
int a,b;
scanf("%d%d",&a,&b);
coll[a].push_back(b);
}
int ans=hungary();
printf("%d\n",ans);
for(int i=1;i<=K;i++)
coll[i].clear();
}
}