hdu1150

/*
分析:
    写出来了,so~high p ~
    二分图的最小顶点覆盖数 = 二分图的最大匹配数


                                             2012-07-13
*/






#include"stdio.h"
#include"string.h"


struct A
{
	int total;
	int mem[111];
}E[111];
int match[111];
int visit[111];


int DFS(int k)
{
	int i;
	for(i=0;i<E[k].total;i++)
	{
		if(visit[E[k].mem[i]]) continue;
		visit[E[k].mem[i]]=1;
		if(match[E[k].mem[i]]==-1 || DFS(match[E[k].mem[i]]))
		{
			match[E[k].mem[i]]=k;
			return 1;
		}
	}
	return 0;
}


int main()
{
	int n,m,k;
	int t,a,b;
	int ans;
	int i;


	while(scanf("%d",&n),n)
	{
		scanf("%d%d",&m,&k);
		memset(match,-1,sizeof(match));


		for(i=0;i<n;i++)	E[i].total=0;
		while(k--)
		{
			scanf("%d%d%d",&t,&a,&b);
			if(a==0||b==0)	continue;
			E[a].mem[E[a].total++]=b;
		}


		ans=0;
		for(i=1;i<n;i++)
		{
			if(E[i].total==0)	continue;
			memset(visit,0,sizeof(visit));
			ans+=DFS(i);
		}


		printf("%d\n",ans);
	}
	return 0;
}


你可能感兴趣的:(hdu1150)