1. 程式人生 > >【文文殿下】網路流學習筆記

【文文殿下】網路流學習筆記

最大流演算法

Dinic

一個網路的割:存在一個邊集,刪去集合裡的邊時,S-T不再連通

最小割

所有割中邊權之和最小的

最小割-最大流定理

最小割等於最大流

二分圖匹配

\(M\)為邊集\(E\)的一個子集,如果對於任何一個點,都最多被\(M\)中一條邊覆蓋,則成\(M\)為一個匹配。

最大匹配

使\(|M|\)最大的一個匹配(可能有多個)

最大匹配求法

源點S向所有X連邊,Y向T連邊,容量均為1,原始圖上邊容量均為1,最大流=最大匹配。

二分圖最小頂點覆蓋

\(V'\)是點集\(V\)的一個子集,對於任意一條邊,至少有一端在\(V'\)內。

最小的一個\(V'\)
被稱作最小頂點覆蓋

最大匹配=最小頂點覆蓋

證明:若有一條邊未覆蓋,則匹配+1,與最大匹配矛盾

二分圖最大獨立集

\(V'\)\(G\)的一個獨立集,當且僅當對於任何一條邊,它至少有一端不在\(V'\)

最大獨立集大小等於\(|V|-\)最大匹配

證明:最小割。若(S,x)為割邊,則在\(V'\)中刪去x。y同理。

有向圖最小路徑覆蓋

用盡可能少的簡單路徑覆蓋整張圖。特殊的:一個點也是一條簡單路徑。

二分圖建模:把每個點\(x\)拆成\(x_1,x_2\),分別屬於X,Y.

對原圖一條邊,(x,y),連結(\(x_1,y_2\))

易證:最小路徑覆蓋=\(|V|-\)
最大匹配。

X中未被匹配的點是每條路徑的起點

二分圖點權最大獨立集

最大權獨立集=\(\sum value(x) -\)最小權頂點覆蓋

最小權覆蓋=最大匹配=最小割=最大流(原圖的邊流量為無窮大)

建圖:S向所有X連邊,容量為value(x),所有的Y向T連邊,容量為value(y) ,原圖中的邊容量為無窮大

最大權閉合子圖

\(U\)\(G\)的一個子圖,x屬於\(U\) 當且僅當對於任何一條邊(x,y),y也屬於\(U\),那麼\(U\)\(G\)的一個閉合子圖

權值和最大的閉合子圖稱為最大權閉合子圖(權值有正有負)

求法:建立源點S,向所有x(value(x)>0)連邊,容量為value(x),建立匯點T,所有y(value(y)<0)向T連邊,容量為-value(y),對於原圖中的邊(x,y),在x,y之間連一條容量為無窮大的邊。

最大權閉合子圖=\(\sum_{value(x)>0} value(x) -\) 最小割

證明:

若選了一個點x,則他的後繼一定會選(最大流),滿足閉合子圖。

若一個(S,x)為割邊,說明(S,x)滿流,則選了x,他的後繼付出的代價一定不小於x的權值,即x的貢獻小於等於0

有節點容量的最大流

建圖:對於每一個點x拆成兩個點\(x_1,x_2\),對於所有入邊,連結\(x_1\)出邊從\(x_2\)出,\(x_1,x_2\)之間連結一條容量為節點容量的邊

上下界網路流

每條邊有流量上界和流量下界

建圖:先建新源點S1,新匯點T1,對於一條邊(x,y) ,從x到y連一條\(c(e)-l(e)\)的邊,從S1向y連一條\(l(e)\)的邊,從x向T1連一條\(l(e)\)的邊。

建一條從T到S容量為k的邊。

存在可行流:從S1出發的所有邊都滿流。

最小流:二分K,存在可行流,最小的K即為最小流

最大流:先跑可行流。跑完以後,把自己加入的必要弧刪去,再恢復源匯,嘗試增廣S-T

費用流

演算法:ZKW費用流