二分匹配匈牙利算法
#include<iostream> #include<cstring> using namespace std; int line[505][505],m,n,used[505],man[505];; int find(int x) { for(int i=1;i<=n;i++) { if(line[x][i]==1&&used[i]==0) { used[i]=1; if(man[i]==0||find(man[i])) { man[i]=x; return 1; } } } return 0; } int main() { int k,a,b,tot; while(cin>>k) { memset(line,0,sizeof(line)); memset(man,0,sizeof(man)); if(k==0) break; cin>>m>>n; for(int i=1;i<=k;i++) { cin>>a>>b; line[a][b]=1; } tot=0; for(int i=1;i<=m;i++) { memset(used,0,sizeof(used)); if(find(i)) tot++; } cout<<tot<<endl; } }