#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,m,k; int mat[110][110]; int link[110]; int vis[110]; bool find(int u) { int v; for(v=0;v<m;v++) if(mat[u][v]&&!vis[v]) { vis[v]=true; if(link[v]==-1||find(link[v])) { link[v]=u; return true; } } return false; } int pipei() { int res=0; int u; memset(link,-1,sizeof(link)); for(u=0;u<n;u++) { memset(vis,0,sizeof(vis)); if(find(u)) res++; } return res; } int main() { int i,j; int from,to; while(scanf("%d",&n),n) { scanf("%d%d",&m,&k); memset(mat,0,sizeof(mat)); for(i=0;i<k;i++) { scanf("%d%d%d",&j,&from,&to); if(from>0&&to>0) mat[from][to]=1; } int ans=pipei(); printf("%d ",ans); } return 0; }
http://m.blog.csdn.net/blog/ZYY173533832/10239415