#include<iostream> #include<cstring> #include<stdio.h> using namespace std; int m,n,k; /*hdu1150 Machine Schedule 最小点覆盖=最大匹配数,把任务看做匹*/ int Link[202][202],vis[202],yM[202]; bool find_path(int u)//匈牙利算法 { for(int v=1;v<=m+n;v++) { if(!vis[v]&&Link[u][v]) { vis[v]=1; if(yM[v]==-1||find_path(yM[v])) { yM[v]=u; return true; } } } return false; } int hungary()//匈牙利算法 { int ans=0; for(int i=1;i<=n+m;i++) { memset(vis,0,sizeof(vis)); if(find_path(i))ans++; } return ans; } void init() { memset(Link,0,sizeof(Link)); memset(yM,-1,sizeof(yM)); } int main() { int a,b,c; while(cin>>n&&n) { init(); cin>>m>>k; for(int i=0;i<k;i++) { scanf("%d%d%d",&c,&a,&b); Link[a][b+n]=1; } cout<<hungary()<<endl; } }