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 題意:一個網格裏面有一些目標,可以從某一行,某一列發射一發子彈,可以打掉它;求最少的子彈,和在哪裏打?