HDU 1150 Machine Schedule(最小點覆蓋)

最小點覆蓋 = 最大匹配數

#include<stdio.h>
#include<string.h>
#define N 150
int map[N][N],vis[N],match[N],m,n,k;
int find(int u)
{
	int i,j;
	for(i=1;i<=n;i++)
	{
		if(map[u][i]&&!vis[i])
		{
			vis[i]=1;
			if(match[i]==-1||find(match[i]))
			{
				match[i]=u;
				return 1;
			}
		}
	}
	return 0;
}
int hungary()
{
	int i,j,sum=0;
	for(i=1;i<=n;i++)
	{
		memset(vis,0,sizeof(vis));
		if(find(i))sum++;
	}
	return sum;
}
int main()
{
	int x,u,v,i,j;
	while(scanf("%d",&n),n)
	{
		memset(map,0,sizeof(map));
		memset(match,-1,sizeof(match));
		scanf("%d%d",&m,&k);
		while(k--)
		{
			scanf("%d%d%d",&x,&u,&v);
			map[u][v]=1;
		}
		printf("%d\n",hungary());
	}
	return 0;
}


發佈了54 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章