题目连接
#include<cstdio>
#include<cstring>
#include<map>
#include<vector>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=100+50;
int k,n,m;
vector<int>E[maxn];
int f[maxn];
bool vis[maxn];
int ans;
bool match(int x)
{
int l=(int)E[x].size();
for(int i=0;i<l;i++)
{
int t=E[x][i];
if(!vis[t])
{
vis[t]=true;
if(f[t]==-1||match(f[t]))
{
f[t]=x;
return true;
}
}
}
return false;
}
int hungary()
{
ans=0;
memset(f,-1,sizeof(f));
for (int i=2;i<=n;i++)
{
memset(vis, false, sizeof(vis));
if(match(i))
ans++;
}
return ans;
}
int main ()
{
while(scanf("%d",&n),n)
{
scanf("%d%d",&m,&k);
int I,a,b;
for(int i=0;i<=n;i++)
E[i].clear();
for(int i=0;i<k;i++)
{
scanf("%d%d%d",&I,&a,&b);
E[a+1].push_back(b+1);
}
int ans=hungary();
printf("%d
",ans);
}
return 0;
}