1. 程式人生 > >hdoj1150(最小點覆蓋)

hdoj1150(最小點覆蓋)

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

請合理為每個任務安排一臺機器併合理安排順序,
每個任務要有對應A B機器的模式中至少要有一種來執行
每次切換都會付出代價1,使得代價最小,
- -求出這個最小值。

思路:
這很明顯是有張二分圖。
點:A模式,B模式;
邊:job_k可由機器A的模式i轉化成機器B的模式j(可以理解是任務)
那麼問題就轉化成是否存在一個最小點集,使得所有的邊都至少和該點集的一個點相聯絡。
這就是最小頂點覆蓋數

補:點覆蓋、最小點覆蓋、最小頂點覆蓋數
點覆蓋集即一個點集,使得所有邊至少有一個端點在集合裡。
或者說是“點” 覆蓋了所有“邊”。
極小點覆蓋(minimal vertex covering):本身為點覆蓋,其真子集都不是。
最小點覆蓋(minimum vertex covering):點最少的點覆蓋。點覆蓋數(vertex covering number):最小點覆蓋的點數。
=最大匹配數

其實這題對於本萌新而言是這個最小點覆蓋的問題
二分圖求最小頂點覆蓋:
即用最少的頂點個數可以讓每條邊至少與其中一個點關聯

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <queue>
#include <math.h>
#include <queue>
#include <stack>
using namespace
std; #define INF 0x3f3f3f #define pi acos(-1.0) #define LL long long #define N 550 int ma[N][N]; int cx[N],cy[N]; int vis[N]; int k,m,n; int fuck(int u) { for(int i=0; i<m; i++) { if(!vis[i]&&ma[u][i]) { vis[i]=1; if(cy[i]==-1||fuck(cy[i])) { cy[i]=u; return
1; } } } return 0; } int main() { while(~scanf("%d",&n)&&n) { int a,b; scanf("%d%d",&m,&k); memset(ma,0,sizeof(ma)); int x; for(int i=0; i<k; i++) { scanf("%d%d%d",&x,&a,&b); if(a>0&&b>0) //初始狀態為0,一開始0的邊不要加 ma[a][b]=1; } memset(cy,-1,sizeof(cy)); int ans=0; for(int i=0; i<n; i++) { memset(vis,0,sizeof(vis)); if(fuck(i)) { ans++; } } printf("%d\n",ans); } return 0; }

相關推薦

hdoj1150覆蓋

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

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 1150覆蓋

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

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

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

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

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

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

HDU 1150 Machine Schedule覆蓋問題

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

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二分圖求覆蓋

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

二分圖相關定理及其證明覆蓋+路徑覆蓋+大獨立集+覆蓋

①最小路徑覆蓋: 給定有向圖G=(V,E)。設P 是G 的一個簡單路(頂點不相交)的集合。如果V 中每個頂點恰好在P 的一條路上,則稱P是G 的一個路徑覆蓋。P 中路徑可以從V 的任何一個頂點開始,長度也是任意的,特別地,可以為0。G 的最小路徑覆蓋是G 的所含路徑條數最少的路徑覆蓋。 路徑覆蓋

Machine Schedule覆蓋=大匹配

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

POJ - 2376 Cleaning Shifts 貪心區間覆蓋

red his 時間 sin lines farmer cte number limit Cleaning Shifts Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do

POJ 3216 Repairing Company路徑覆蓋

false 時間 cpp algorithm true 持續時間 set rgb AR POJ 3216 Repairing Company id=3216">

poj2060——Taxi Cab Scheme路徑覆蓋

起點 schedule n) def simple ted des single output Description Running a taxi station is not all that simple. Apart from the obvious demand

hdoj-1068(二分圖的覆蓋

printf name size %d back show matrix dfs blank 題目 1 問題轉化: 求二分圖最小點覆蓋(覆蓋所有的邊) 2 問題的解決: 二分圖最小點覆蓋==其最大匹配數 3 證明: 鏈