HDU 1151 Air Aaid 最小路徑覆蓋

2021-06-06 22:15:46 字數 720 閱讀 2488

題目大意:

在乙個城鎮,有m個路口,和n條路,這些路都是單向的,而且路不會形成環,現在要弄一些傘兵去巡查這個城鎮,

傘兵只能沿著路的方向走,問最少需要多少傘兵才能把所有的路口搜一遍。這個題目就轉換成求解有向無環圖的最

小路徑覆蓋問題了。

乙個結論:有向無環圖的最小路徑覆蓋=該圖的頂點數-該圖的最大匹配。

ac**:

#includeusing namespace std;

const int max=121;

int no_of_intersections,no_of_streets,t;

int link[max]; //記錄當前與street終點相連的起點點

bool map[max][max]; //儲存二分圖,起點到終點有路徑,則map[x][y]=true;反之,為false

bool useif[max]; //記錄路口點是否使用了)

void getmap() //存圖

}bool can(int t)

} }return false;

}int maxmatch()

return num;

}int main()

{ cin>>t;

while(t--)

{ cin>>no_of_intersections>>no_of_streets;

getmap();

cout<

HDU1151最小路徑覆蓋

dag圖 無迴路有向圖 的最小路徑覆蓋 用盡量少的不相交簡單路徑覆蓋有向無環圖 dag 的所有頂點,這就是dag圖的最小路徑覆蓋問題。最小路徑覆蓋數 節點數 最大匹配數 include include include using namespace std const int maxn 200 in...

HDU 1151 Air Raid(最小路徑覆蓋)

解答 最小路徑覆蓋問題 在乙個有向圖中,使用最少的路徑訪問完所有的節點。最小路徑覆蓋 頂點數 最大匹配數 有向圖g v,e 將v中每個頂點vi分成vi 與vi 如果存在一條vi到vj的邊,那麼就在二分圖中連線一條vi 與vj 的邊。證明參見 include using namespace std c...

hdu 1151 最小覆蓋路徑演算法證明

又是二分圖。若還不知道匈牙利演算法,看我前面的文章 先把每個點拆成兩個,乙個表示出,乙個表示入,根據資料輸入,對應的出點和對應入點之間構造了一條邊。這樣就有了乙個二分圖。有向圖的最小路徑覆蓋 總的點數 為拆分前的 最大匹配數。證明如下 先假設所有點我們都派出乙個傘兵。然後每增加一條匹配,就代表我們從...