最大權閉合子圖 - [求最大點權的閉合子圖]


引用來自http://www.cnblogs.com/wuyiqi/archive/2012/03/12/2391960.html的思想;

首先有一個有向連通圖,每個點帶有一個權值,例如:

 

此時,構建一個超級源點s,一個超級匯點t,所有的點按權值的正負連接到s和t上,轉換成一個邊權值有向圖,如下圖:

(注:點權為0的點可以忽略,對結果沒有影響)

 

這時,可以得到小結論:

 

①該帶邊權有向圖的關於s-t最小割,是簡單割;

  簡單割:割集中所有的邊,都與s或t相連接。

  顯然的,因為不與s,t相連的邊,權值都是INF,最小割不可能割在INF的邊上;

  這早在文章http://www.cnblogs.com/dilthey/p/7401563.html中就有出現提到過,實際上,這個帶邊權有向圖就是二分圖;

 

②該圖中的每一個簡單割產生的兩個子圖,我們記含有點s的是圖S,含有點t的是圖T,則圖S是閉合圖;

  閉合圖:在一個圖中,我們選取一些點構成集合,若集合中任意點連接的任意出弧,所指向的終點也在V中,則這個集合以及所有這些邊構成閉合圖。

  證明:簡單割內不包含邊權為INF的邊,即不含有連通兩個圖的邊(除了連接在t點上的邊之外);

     即,圖S中沒有邊與圖T連通,那么,所有的邊都只能連接在圖S之內,即為閉合圖。

  樣例:

          

 

③最小割產生的圖S和圖T,圖S為最大權閉合子圖;

  最大權閉合子圖:在整個圖中,有多個子圖是滿足閉合圖的條件的,其中點權值之和最大的,為最大權閉合子圖;

  因為割集中所有的邊,不是連接在s上,就是連接在t上;

  我們記割集中,所有連接在s上的邊的權值和為x1,所有連接在t上的邊的權值和為x2,而割集中所有邊權值和為X=x1+x2;

  又,記圖S中所有點的權值和為W,記其中正權值之和為w1,負權值之和為 - w2,故W = w1 - w2;

  而 W + X = w1 - w2 + x1 + x2,由於x2 = w2

    (因為圖S中所有負權值的點,必然連接到t點,而圖S必然要與t分割開;故割集中,“連接在t點上的邊權值和”就是“圖S中所有負權值點的權值之和,取負”)

  因而W + X = w1 + x1;

  而顯然的,w1 + x1是整個圖中所有正權值之和,記為SUM;

  故W = SUM - X,即 “圖S中所有點的權值和” = “整個圖中所有正權值之和”  - “割集中所有邊權值和”;

  然后,因為SUM為定值,只要我們取最小割,則“圖S中所有點的權值和”就是最大的,即此時圖S為圖S為最大權閉合子圖;

 

最后,我們就有了求解這類問題的完整思路:

  ①先記錄整個圖中,所有正點權值的和;

  ②建立對應流網絡,求最大流,最大流在數值上等於最小割,故我們得到了流網絡的s-t最小割;

  ③“所有正點權值的和”減去“s-t最小割”,即得最大權閉合子圖的權值和。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM