一、基本問題:
1.到底什麼是割:原始點集為V,選出一些點集S使得s∈S,T=V-S,t∈T,則S到T的邊為S到T割,記做[S,T]。
2.什麼是最小割:圖中所有的割中,邊權值和最小的割為最小割!
3.割得容量容量和流量計算的區別:割[S,T]的容量為∑(邊(u,v)的容量和),其中u∈S,∈T。也就是說割的容量不計算反向的邊!!而流量為正向的和反向的代數和。
4.最大流-最小割定理:最大流的值為最小割的容量!
5.怎樣求割:求完最大流後,在殘留網路中從source開始dfs,被染色的為S,未被染色的為T,則邊集[S,T]為割。
二、一些割的性質:
1.割[S,T],流量只能從S流向T,不能從T流向S!(在最大流後找割dfs時其實就滿足這個性質,假設T中一個點v流向S中的一個點u,那麼u到v有負流量,則u到v的殘留網路嚴格大於0。反向dfs證明類似)
2.最大流後,割邊一定滿流。減小某一割邊後,網路流減小。
3.如,從s沿著殘餘流量dfs,得到點集S;同理沿著t反向dfs,得到點集T;剩下的是M。分界線cut1和cut2是其中一割,邊自然為割邊。然而在M中還存有割邊(一定存有!!否則M就沒用了!)
4.退化一下:如所示,S和T有相鄰部分邊集E1,S和M重合邊集相鄰部分邊集E2,M和T相鄰邊集部分E3,那麼直接升高E1中某條邊的容量,會使整體容量直接增高!反之:而如果增大S和M相鄰的割邊或者M和T相鄰的割邊,網路流不直接增大,因為M中還存有割邊限制
5.繼續退化:如果M==空集,cut1和cut2重合(變為cut),則網路中割唯一。可以通過 if ( |S|+|T|==總點數) 來判斷
三、割的三個典型應用(參考《最小割模型在資訊學競賽中的應用》):最大權閉合圖、最大密度子圖、二分圖的最小點權覆蓋(二分圖的最大點權獨立集)
poj 3468 Dual Core CPU
題意:給出不同模組在兩個cpu工作各自的耗費和某些模組若不在同一CPU啟動並執行耗費,求合理安排各個模組的最小耗費
解法:最大流=最小割,s、t分別代表兩個cpu,耗費作為cap。證明:每個頂點都與源點和匯點相連,即每個模組都可在任意一個CPU中工作,對於圖中的任意割,源點和匯點必不連通,因此每個模組都不可能同時在兩個CPU中運行,此時的耗費為割的容量。
poj 1815 Friendship題意:給出一些人之間的通話關係,如果A能跟B聯絡,B能跟C聯絡,那麼A能跟C聯絡,求刪除最少的人,然給定的兩個點S、T斷了聯絡,如果存在被刪除的店,要求輸出字典序最小的。就是編號小的優先。
思路:每個點i拆為i和n+i,(i,n+i)間流量為1,確保每個人只被刪除一次。如果(i,j)之間有通話關係,則(i+n,j)間流量為1,源點和s間流量為inf,t和匯點間流量為inf,s、t與自己拆點間流量為inf。輸出最小割很容易,關鍵是按字典順序輸出割邊。每次從小到大消掉每一個點(讓拆點後的邊容量為0),然後再次求最大流,如果此次不等於上次最大流,則此邊為割邊,輸出;否則,將消除的點恢複。
注意:0和No Answer的區別:如果s與t直接連通則No Answer;如果s與t之間沒有任何串連則為0(最大流為0);
poj 3084 Panic Room
題意: 有N個房間並有一間是需要保護的,另外有一些房間有恐怖份子要進入該房間。房間與房間有門(有可能多個門),門有鎖,鎖是只能一邊能控制,一但鎖上門,另一邊不可進入。要防止保護的房間被侵入,因此需要鎖上有些門,求最少要鎖多少個門。
構圖:對於每把鎖,如果能從a房間鎖住並且連通b房間,則(a,b)容量inf(b,a)容量+1,將源點與所有有入侵者的房屋間連一條容量為inf的邊,最小割值即為答案(證明:割後所有有入侵者的房間不與需要保護的房間在一個集合中,對於每把鎖,不能夠從入侵者一側控制則容量為1,否則為inf即此鎖對入侵者失效,因此若最小割>=inf
則說明無論關多少門都不能奏效)
ZOJ 2587
Unique Attack
判斷最小割是否唯一,由上述5的性質知求得最大流之分別從起點和終點延殘餘網路dfs,若能夠遍曆所有的點則最小割是唯一的。
poj2914 Minimum
Cut
描述:無向圖的最小割stoer-wagner演算法(不指定source, sink)
Stoer-Wagner演算法
求解無向連通圖的最小邊割(不指定source和sink),O(V^3)。據說 枚舉 + 網路流必然tle
思路:類似prim演算法,求“最大產生樹”,樹種最後一個點v與他的前驅pre[v]合并為pre[v](也就是pre[v]的流量加上了v的流量就行了),這樣進行V次就可以了。而ans為每次最大產生樹後的ans = min(ans, E[pre[v]][v])。
技巧:
1.用類比指標比較好控制縮點。
2.和prim的區別:每次產生樹並不是從新找最大邊,而是在上一次鬆弛的基礎上,找出最大邊。也就是說鬆弛與選最大邊合并了
3.由於2,沒必要用堆了
poj 2987 Firing 最大(點)權閉合圖
poj3155 Hard Life