könig定理是乙個二分圖中很重要的定理,它的意思是,乙個二分圖中的最大匹配數等於這個圖中的最小點覆蓋數。如果你還不知道什麼是最小點覆蓋,我也在這裡說一下:假如選了乙個點就相當於覆蓋了以它為端點的所有邊,你需要選擇最少的點來覆蓋所有的邊。
**自:
匈牙利演算法需要我們從右邊的某個沒有匹配的點,走出一條使得「一條沒被匹配、一條已經匹配過,再下一條又沒匹配這樣交替地出現」的路(交錯軌,增廣路)。但是,現在我們已經找到了最大匹配,已經不存在這樣的路了。換句話說,我們能尋找到很多可能的增廣路,但最後都以找不到「終點是還沒有匹配過的點」而失敗。我們給所有這樣的點打上記號:從右邊的所有沒有匹配過的點出發,按照增廣路的「交替出現」的要求可以走到的所有點(最後走出的路徑是很多條不完整的增廣路)。那麼這些點組成了最小覆蓋點集:右邊所有沒有打上記號的點,加上左邊已經有記號的點。看圖,右圖中展示了兩條這樣的路徑,標記了一共6個點(用 「√」表示)。那麼,用紅色圈起來的三個點就是我們的最小覆蓋點集。
首先,為什麼這樣得到的點集點的個數恰好有m個呢?答案很簡單,因為每個點都是某個匹配邊的其中乙個端點。如果右邊的哪個點是沒有匹配過的,那麼它早就當成起點被標記了;如果左邊的哪個點是沒有匹配過的,那就走不到它那裡去(否則就找到了一條完整的增廣路)。而乙個匹配邊又不可能左端點是標記了的,同時右端點是沒標記的(不然的話右邊的點就可以經過這條邊到達了)。因此,最後我們圈起來的點與匹配邊一一對應。
其次,為什麼這樣得到的點集可以覆蓋所有的邊呢?答案同樣簡單。不可能存在某一條邊,它的左端點是沒有標記的,而右端點是有標記的。原因如下:如果這條邊不屬於我們的匹配邊,那麼左端點就可以通過這條邊到達(從而得到標記);如果這條邊屬於我們的匹配邊,那麼右端點不可能是一條路徑的起點,於是它的標記只能是從這條邊的左端點過來的(想想匹配的定義),左端點就應該有標記。
最後,為什麼這是最小的點覆蓋集呢?這當然是最小的,不可能有比m還小的點覆蓋集了,因為要覆蓋這m條匹配邊至少就需要m個點(再次回到匹配的定義)。
最小點覆蓋
題目連線 最小點覆蓋為 在乙個二分圖中,選取最少的點可以把所有的變覆蓋,點的最少個數就是最小點覆蓋。最小點覆蓋 最大二分匹配。克魯斯卡爾演算法。關於本題 把從零開始,轉化成從一開始。起點不用加入e,因為機器的起始狀態就是1,或者加入e但是不參加計算,我採用的是第二種。include include ...
K nig定理及證明
k nig定理的內容是,乙個二分圖中的最大匹配數等於這個圖中的最小點覆蓋數。看過matrix67大牛的證明 後感覺證的很累贅,於是自己寫乙個。與最大匹配相關的東西可以在這裡看到。假如已知最大匹配m,由最大匹配的定義可知,二分圖k中的兩個集合a,b中已經取出了最多個匹配點,即取出了最多個不共用乙個點的...
Asteroids 最小點覆蓋問題
bes si ebessie bessie 想以n nn n nn網格 1 n 500 1 n 500 1 n 5 00 的形狀在危險的小行星場中導航她的飛船。網格包含k kk個小行星 1 k 10 000 1 k 10,000 1 k 1 0,00 0 它們方便地位於網格的晶格點處。幸運的是,貝茜...