#include <stdio.h>
#include <string.h>
#define maxn 105
int G[maxn][maxn];
int mark[maxn];
int visit[maxn];
int n,m;
int path(int u)
{
int i;
for(i=1;i<m;i++)
{
if(G[u][i]==1 && visit[i]==0)
{
visit[i]=1;
if(mark[i]==-1 || path(mark[i]))
{
mark[i]=u;
return 1;
}
}
}
return 0;
}
int Max_Match()
{
memset(mark,-1,sizeof(mark));
int i,ans=0;
for(i=1;i<n;i++)
{
memset(visit,0,sizeof(visit));
if(path(i))
ans++;
}
return ans;
}
int main()
{
int T,a,b,i,c;
while(scanf("%d",&n),n)
{
memset(G,0,sizeof(G));
scanf("%d%d",&m,&T);
for(i=0;i<T;i++)
{
scanf("%d%d%d",&c,&a,&b);
if(a==0 || b==0)
continue;
G[a][b]=1;
}
printf("%d\n",Max_Match());
}
}
hdu Machine Schedule(二分图的最小覆盖)
最新推荐文章于 2020-03-11 16:27:36 发布