//二分图的最小顶点覆盖数=最大匹配数
//本题就是求最小顶点覆盖数的。 #include<stdio.h> #include<string.h> #define maxn 105 int n,m,k; bool map[maxn][maxn],mark1[maxn]; int mark[maxn]; bool dfs(int v) { for(int i = 1; i <= m; i++) { if(mark1[i] || !map[v][i]) continue; mark1[i] = true; if(!mark[i] || dfs(mark[i])) { mark[i] = v; return true; } } return false; } int main() { int num,a,b; while(scanf("%d",&n) != EOF,n) { scanf("%d%d",&m,&k); memset(map,false,sizeof(map)); memset(mark,0,sizeof(mark)); for(int i = 0; i < k; i++) { scanf("%d%d%d",&num,&a,&b); if(a&&b)//初始模式为0所以不需要重新启动 map[a][b] = true; } int cnt = 0; for(i = 1; i <= n; i++) { memset(mark1,false,sizeof(mark1)); if(dfs(i)) cnt ++; } printf("%d\n",cnt); } return 0; }