首先,最小路徑覆蓋=總節點數-最大匹配數。這個應該已經是路人皆知了。
所謂最小路徑覆蓋,是指在乙個有向圖中,找出最少的幾條路徑,用它們來覆蓋全圖
這裡說的值得注意的地方,如果有向圖的邊有相交的情況,那麼就不能簡單的對原圖求二分匹配了
舉個例子,假設有圖:1->2 2->5 2->3 4->2,事實上,這其實就是兩條邊:1->5 4->3 ,節點2只是他們的乙個交點
如果只是簡單的在原圖的基礎上求二分匹配,那麼得到的匹配答案是2,最小路徑覆蓋答案便是5-2=3。
可是隨便一看都能看看出端倪,這個圖中,只需要兩個點便可以探索完整個地圖,這裡最小路徑覆蓋數明顯是2。
問題究竟出在**呢?其實就和這個交點2有關。既然邊有相交,那麼他們的連通性也應該連通下去。
解決的辦法是對原圖進行一次閉包傳遞(也就是flody),於是便增加了四條邊:1->3 1->5 4->3 4->5
這時再求最大匹配數,匹配答案便是3,最小路徑覆蓋值為2,這是正確答案!
具體問題可見 pku 2594 treasure exploration
最小路徑覆蓋問題(最小路徑覆蓋)
本題題目描述可以發現很明顯的最小路徑覆蓋問題,又因為最小路徑覆蓋 節點數 二分圖最大匹配數,所以本題可以用匈牙利演算法求出二分圖最大匹配數,也可以向第一題那樣用網路流模型求出最大匹配數。本題建模時不同在於,每個點要分成兩個點,乙個為起點,乙個為終點,再來求二分圖最大匹配。然後麻煩就在於本題也要輸出路...
最小路徑覆蓋問題
題目描述 題解 其實這道題才是最裸的因為它把建圖都交代了 相當於每個點出邊唯一,入邊唯一。然後發現這是二分圖匹配。include include include include using namespace std define n 400 define m 6050 const int inf ...
最小路徑覆蓋的注意之處
本片系 首先,最小路徑覆蓋 總節點數 最大匹配數。這個應該已經是路人皆知了。所謂最小路徑覆蓋,是指在乙個有向圖中,找出最少的幾條路徑,用它們來覆蓋全圖 這裡說的值得注意的地方,如果有向圖的邊有相交的情況,那麼就不能簡單的對原圖求二分匹配了 舉個例子,假設有圖 1 2 2 5 2 3 4 2,事實上,...