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 證明: 鏈