1. 程式人生 > >二分圖定理及證明

二分圖定理及證明

由於 ron 連接 ref com 圖集 最小路徑 一次 補集

最小頂點覆蓋

定義:能覆蓋所有的邊的最少頂點數(或是最小點權和)
計算方法:最小頂點覆蓋 = 最大匹配數

最大獨立集

定義:兩兩互不相鄰的點組成的集合的最大點數(或是最大點權和)
計算方法:最大獨立集 = 點總數 - 最小頂點覆蓋
例題:方格取數問題(https://daniu.luogu.org/problemnew/show/2774)

我們以最大點權和(最大獨立集就是點權全為1)為例證明:
一個二分圖集合{X}、{Y},
[1> 從S向{X}連一條流量為點權的邊。
[2> 從{Y}向T連一條流量為點權的邊。
[3> 把 不能相鄰或同時選的兩點 之間連接一條流量為INF的邊。
那麽答案 = 所有點點權和 - 此二分圖的最小割。

顯然當S與T聯通時,說明有不合法的選點。
那麽對於任意一個不合法選點,要麽斷掉(S - {X})這條邊,要麽斷掉({Y} - T)這條邊。
這不就是最小割嗎,最小割=最大流=最小頂點覆蓋,即得證。

最小路徑覆蓋

定義:能覆蓋所有點的最少路徑數 [不要求為二分圖]
技術分享圖片

如此圖的最小路徑覆蓋為3。
為1->3->4->6與2與5->7。(註:每個點只能到一次)。

計算方法1:最小路徑覆蓋 = 最大流的最小費用(特殊建圖)
例題:[SDOI2010]星際競速( https://www.luogu.org/problemnew/show/P2469)
證明1:用最小費用流證明:
把每一個點拆成 i 與 i‘ ,形成一個二分圖,如下連邊:

[1> 從S向{i}連接一條 \(cap=1,cost=0\) 的邊。
[2> 從{i‘}向T連接一條 \(cap=1,cost=0\) 的邊。
[3> 如果a-->b在原圖上有邊,那麽a 到 b‘ 連一條 \(cap=1,cost=0\) 的邊。
[4> 從S向{i‘}連一條 \(cap=1,cost=1\) 的邊。
那麽此時,每條S-->i‘的邊就對應選擇了一條路徑,費用為1,等於選擇了一個起點。
最終的最少路徑數為:此圖的最小費用最大流的費用值。

所求為路徑權值最小時,做法一樣,只需把
[4> 中連邊的邊的cost設為對應的從某點出發代價。
[3> 中連邊的代價設為對應的路徑長度。

然後一樣的跑最小費用最大流,答案為最終跑出來的費用。(這個變式詳見例題)

計算方法2:最小路徑覆蓋 = 原圖上的點數 - 最大匹配數(特殊建圖)
證明2:用最大流證明:
把每一個點拆成i 與 i‘ ,形成一個二分圖,只連接法一中的[1>、[2>、[3>的邊。
[1> 從S向{i}連接一條 \(cap=1,cost=0\) 的邊。
[2> 從{i‘}向T連接一條 \(cap=1,cost=0\) 的邊。
[3> 如果a-->b在原圖上有邊,那麽a 到 b‘ 連一條 \(cap=1,cost=0\) 的邊。
然後顯然每一個點會優先嘗試由S流通到T,但由於[3>中cap=1的限制,有些點流通不了。
那麽剩下的這些點只能作為起點 。
所以求最大匹配即求最多可流通點數,剩下的點只能作為路徑起點,即為選擇了一條路徑。
即證畢。

最大權閉合子圖

定義:給定一個有向圖,從中選擇一些點組成一個點集V。對於V中任意一個點,其後續節點都仍然在V中。
計算方法:最大權=所有正點和-最小割
例題:太空飛行計劃問題(https://www.luogu.org/problemnew/show/2762)

證明:
一般來說,這類問題都與最佳收益有關。
這裏就以這個為例,假設實驗集合{X}的點選擇會有收益,器材集合{Y}的點選擇會有損失。
但是要選擇Xi則必須選擇{Ya , Yb , ....}一個{Y}的集合。問最大收益? (同例題)
我們假設{X}中的所有收益都獲取到了。
那麽最終答案為 總收益 - 總損失,現在我們只需要最小化總損失。
我們如下連邊:
[1> 從S向{X}連一條 流量限制 為收益的邊。
[2> 從{Y}向T連一條 流量限制 為損失的邊。
[3> 若選Xi必須要選Yj,那麽由Xi向Yj連一條 流量限制 為INF的邊。
那麽最小損失就是最小割。
我們可以這麽理解:S表示選擇,T表示不選擇。
一個東西不能既選又不選,所以S->X 與 Y->T的其中一條邊是一定要斷掉的。
[A> 如果割掉S->X的邊,則實驗Xi被劃分到了 不選(T) 中去,損失為實驗收益(沒有進行此實驗,無收益)
[B> 如果割掉Y->T的邊,則器材Yi被劃分到了 選擇(S) 中,損失為器材費用(購買了此器材)
所以當割掉最小割時,達到最優的平衡狀態,為最大權閉合子圖的補集。
即證畢。

二分圖定理及證明