题意:
//题意:
// A机器n种工作模式,B机器m种工作模式,共有k个任务。
// (i,x,y)代表:任务i可由A机器x模式或者B机器y模式完成。任务顺序可以随便改动,
// 如果A或者B机器需要更换模式,则需要重启机器。求完成工作,需要最少启动机器次数。
求最小点覆盖 , 建图很简单, 没想到那个0的情况是不用放进图里面的, 在这里wa了很长时间,没想到,,,
#include <bits/stdc++.h>
using namespace std;
#define se second
#define fi first
#define ll long long
#define pb push_back
#define CLR(a,b) memset(a,(b),sizeof(a))
const int MAXN = (int)1e4+10;
vector<int> E[MAXN];
bool used[MAXN];
int bl[MAXN];
bool find(int u) {
for(int i = 0; i < (int)E[u].size(); ++i) {
int v = E[u][i];
if(!used[v]) {
used[v] = true;
if(bl[v]==0 || find(bl[v])) {
bl[v] = u;
return true;
}
}
}
return false;
}
int main() {
ios::sync_with_stdio(false);
int n, m, k;
while(cin >> n && n) {
cin >> m >> k;
CLR(bl, 0);
for(int i = 0; i <= n+m; ++i) E[i].clear();
while(k--) {
int x, u, v;
cin >> x >> u >> v;
if(!u || !v) continue;
E[u].pb(v);
}
int ans = 0;
for(int i = 0; i < n; ++i) {
CLR(used, false);
if(find(i)) ans++;
}
cout << ans << endl;
}
return 0;
}