题目 :Problem - 1150 (hdu.edu.cn)
#include<bits/stdc++.h>
using namespace std;
#define MXN 110
int n,m,g[MXN][MXN],linker[MXN];
bool used[MXN];
bool dfs(int a){
for(int i=0;i<m;i++){
if(g[a][i]==1&&used[i]!=1){
used[i]=true;
if(linker[i]==-1||dfs(linker[i])==1){
linker[i]=a;
return true;
}
}
}
return false;
}
int hungary(){
int res=0;
memset(linker,-1,sizeof linker);
for(int i=0;i<n;i++){
memset(used,false,sizeof used);
if(dfs(i)){
res++;
}
}
return res;
}
int main(){
int k,a,x,y;
while(scanf("%d",&n)==1&&n){
memset(g,0,sizeof g);
scanf("%d %d",&m,&k);
while(k--){
scanf("%d %d %d",&a,&x,&y);
if(x!=0&&y!=0){
g[x][y]=1;
}
}
printf("%d\n",hungary());
}
return 0;
}