1. 程式人生 > >HDU 1150 Machine Schedule(最小點覆蓋問題)

HDU 1150 Machine Schedule(最小點覆蓋問題)

/*
題意:
A機器n種工作模式,B機器m種工作模式,共有k個任務。(i,x,y)代表:任務i可由A機器x模式或者B機器y模式完成。任務順序可以隨便改動,如果A或者B機器需要更換模式,則需要重啟機器。求完成工作,需要最少啟動機器次數。

解題思路:
畫出二分圖,易知該問題為最小點覆蓋問題,最小頂點覆蓋 = 最大匹配數

證明參見Konig定理:
http://www.cppblog.com/abilitytao/archive/2009/09/02/95147.html
http://www.matrix67.com/blog/archives/116
*/

#include <iostream>
using namespace std;

const int nMax = 105;
int n, m, k;
int map[nMax][nMax];
int link[nMax];
int useif[nMax];

bool can(int t)
{
	for(int i = 1; i <= m; ++ i)
	{
		if(!useif[i] && map[t][i])
		{
			useif[i] = 1;
			if(link[i] == -1 || can(link[i]))
			{
				link[i] = t;
				return 1;
			}
		}
	}
	return 0;
}

int main()
{
	//freopen("f://data.in", "r", stdin);
	while(1)
	{
		memset(map, 0, sizeof(map));
		memset(link, -1, sizeof(link));
		int num = 0;
		scanf("%d", &n);
		if(!n) break;
		scanf("%d%d", &m, &k);
		for(int i = 0; i < k; ++ i)
		{
			int a, b, c;
			scanf("%d %d %d", &a, &b, &c);
			map[b][c] = 1;
		}
		for(int i = 1; i <= n; ++ i)
		{
			memset(useif, 0, sizeof(useif));
			if(can(i)) ++ num;
		}
		printf("%d\n", num);
	}
	return 0;
}

相關推薦

HDU 1150 Machine Schedule覆蓋

As we all know, machine scheduling is a very classical problem in computer science and has been studied for a very long history. Scheduling problems dif

HDU 1150 Machine Schedule覆蓋問題

/* 題意: A機器n種工作模式,B機器m種工作模式,共有k個任務。(i,x,y)代表:任務i可由A機器x模式或者B機器y模式完成。任務順序可以隨便改動,如果A或者B機器需要更換模式,則需要重啟機器。求完成工作,需要最少啟動機器次數。 解題思路: 畫出二分圖,易知該問題為

POJ 3041 Asteroids HDU 1150 Machine Schedule 頂點覆蓋

連結 : POJ 3041  http://poj.org/problem?id=3041 連結: HDU 1150 http://acm.hdu.edu.cn/showproblem.php?pid=1150 POJ 3041 : 建立二分圖,X集合為行,Y為列,小行星

hdu1150—Machine Schedule覆蓋

As we all know, machine scheduling is a very classical problem in computer science and has been studied for a very long history. Scheduling problems differ

POJ 1325 Machine Schedule 覆蓋 && 二分圖大匹配

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"&g

Machine Schedule覆蓋=大匹配

Machine Schedule Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12012 Accepted: 5118 Description As we all know, m

hdu 1150覆蓋

傳送門 二分圖最大匹配=最小點覆蓋 題解:二分圖左邊點集為機器A的模式,右邊為機器B的模式。對於每個任務,左右連邊,最後跑一遍二分圖最大匹配(最小點覆蓋)即可。 #include<cstdi

poj 1325 Machine Schedule頂點覆蓋+大匹配

http://poj.org/problem?id=1325 題意:有AB兩臺機器和k個任務,機器A有n種模式,機器B有m種模式,初始均工作在模式0,每個任務都可以由機器A的一種模式或機器B的一種模式

HDU1054 Strategic Game覆蓋

link Once spa text single str play tree win Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/

POJ - 1463-Strategic game覆蓋

POJ - 1463-Strategic game(最小點覆蓋) Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the solution fast e

匈牙利演算法覆蓋poj3041

題目意思是一次可以毀掉一行或者一列,要求至少毀多少次才能將圖上的x都消滅掉。 簡單的解釋一下最小點覆蓋:在圖中用最少的點,覆蓋圖中所有的邊 將每一行或者列想象成點,每個x想象成一條邊,於是此題很自然的轉換成為了最小點覆蓋問題。 而二分圖的最小點覆蓋數 = 二分圖的最大匹

POJ3041 Asteroids覆蓋

啦啦啦 【題目分析】 比較經典的最小點覆蓋,對於障礙物(i,j),我們可以選擇消第i行,也可以選擇消第j列,所以所有障礙物橫縱座標連邊。 問最少消多少次,就是問最大能匹配幾次,轉化為最大匹配即可。 跑一遍網路流或匈牙利即可。 【程式碼~】 #include<

HDU 4766 模擬退火覆蓋 + 二分

#include <cstdio> #include <cstring> #include <cmath> #include <vector> #include <iostream> #include <al

hdoj1150覆蓋

題意: 兩臺機器,A臺機器有N種模式,B臺機器有M種不同的模式,初始模式都是0 以及K個需要執行的任務(i,x,y),在A臺機器是x模式,在B臺機器是y模式。 請合理為每個任務安排一臺機器併

hdu 1150 Machine Schedule二分圖求覆蓋

        題意:有兩臺機器,可以分別以n和m種不同的模式執行。有k個任務,每個任務可以在分別在第一臺機器和第二臺機器的兩種模式下完成。每次改變機器的模式需要一定的花費,現在問最少要改變幾次機器

POJ 1325 Machine Schedule大匹配數=覆蓋

題意:給你2個機器A(A的模式有n種,標號從0到n-1)和B(B的模式有m種,標號從0到m-1),然後給你k個任務,(i,x,y)表示做完第i個任務可以用A機器的x模式和B機器的y模式 思路:很裸的二分圖最小點覆蓋,這道題需要注意點,A,B機器剛開始的模式都是0,所以在模

hdu 1150 Machine Schedule二分匹配,匈牙利演算法

As we all know, machine scheduling is a very classical problem in computer science and has been studied for a very long history. Scheduling problems differ

[POJ3041] Asteroids覆蓋-匈牙利算法

mes 技術分享 set || tdi line isp none event 傳送門 題意: 給一個N*N的矩陣,有些格子有障礙,要求我們消除這些障礙,問每次消除一行或一列的障礙,最少要幾次。 解析: 把每一行與每一列當做二分圖兩邊的點。

UVa 11419 我是SAM覆蓋+路徑輸出

二分圖 現在 over div space void net https 最小點覆蓋 https://vjudge.net/problem/UVA-11419 題意:一個網格裏面有一些目標,可以從某一行,某一列發射一發子彈,可以打掉它;求最少的子彈,和在哪裏打?