【文文殿下】網路流學習筆記 阿新 • • 發佈:2018-12-14 最大流演算法 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費用流