1. 程式人生 > >最大權閉合子圖小結

最大權閉合子圖小結

閉合子圖:

從原圖的點集V中選取若干個點生成一個新的點集v,若任意的節點i∈v,在原圖中有i->j的邊時j也∈v,那麼v構成的子圖就被稱為閉合子圖.

例如有3個點1,2,3且有邊1->3,2->3構成的一個圖.此時有閉合子圖{1,3},{2,3},{3},{1,2,3}以及∅

最大帶權閉合子圖:

此時每個節點都有其相應的權值,選擇一個閉合子圖使得他們的節點權值和最大,那麼這個子圖就被稱為最大權閉合子圖.

求解最大權閉合子圖的值:

建立源匯點S,T.

①節點i權值為正的建立一條S->i容量為其權值的邊

②節點i權值為負的建立一條i->T容量為其權值絕對值的邊

原圖中的邊的容量都設為inf(無窮大)

跑一邊網路流求出最小割(最大流) = maxflow

最大權閉合子圖的值  =  ∑(所有節點正權值和) - maxflow

證明:

已知最小割會把殘量網路分為兩個點集:

①S能到達的點形成的點集A

②能到達T的點形成的點集B

A0,B0分別表示A,B中原來點權是負數的點集,A1,B1分別表示A,B中點權原來是正數的點集。

A+B-{S,T} = V

簡單割:最小割割邊都是與S或者T直接相連的邊

最小割是簡單割:因為沒有與S或者T直接相連的邊的容量都是inf,所以肯定不會是割邊,所以割邊的一端一定是S或T,證明完畢.

點集A是閉合子圖:

反證法:如果點集A不是閉合子圖,那麼就有i∈A,j∈B,至少存在一條i->j的邊,因為j可以到達T,又有i->j,那麼就存在i∈A使得i可以到達T,與A點集的性質(A中任意點都不能到達T)矛盾.所以A是閉合子圖.

A點權和 =  A1點權和 - |A0點權和|

最小割 = B1點權和 + |A0點權和|

易知B1中的點和S的連邊滿流,A0中的點和T的連邊也是滿流的(證明:不滿流的話之前有與S或者T的連邊,但在殘量網路中怎麼就到達不了了呢?)

若需證明最小割 = B1點權和 + |A0點權和|,即證明B1和A0兩個點集是相對獨立的.前面已經知道B1中的點不能到達A0,反過來也也一樣.所以B1的點和S的連邊與A0點的和T的連邊是不會再同一條路徑上出現的,所以割邊就是兩個集合的疊加,即:

最小割 = B1點權和 + |A0點權和|,證明完畢

又A1點權和 + B1點權和 = 正點權和 = A點權和 + 最小割,即

A點權和  = 正點權和 - 最小割,已知最大權閉合子圖值<=正點權和,又A是一個閉合子圖.

所以要使得A點權和最大就要使割最小,即求最小割.證明完畢