1. 程式人生 > >[學習筆記]最小割之最小點權覆蓋&&最大點權獨立集

[學習筆記]最小割之最小點權覆蓋&&最大點權獨立集

最小點權覆蓋

給出一個二分圖,每個點有一個非負點權

要求選出一些點構成一個覆蓋,問點權最小是多少

 

建模:

S到左部點,容量為點權

右部點到T,容量為點權

左部點到右部點的邊,容量inf

求最小割即可。

 

證明:

每一個割集,對應選擇一些點,對應一個覆蓋。

每個覆蓋有不同的代價,選擇最小的就是最小點覆蓋

每個割集有不同的代價,選擇最小的就是最小割

由於割集和覆蓋一一對應

所以,這個新圖的最小割,就對應原圖的最小點覆蓋。

 

最大點權獨立集

給出一個二分圖,每個點有一個非負點權

要求選出一些點構成一個獨立集,問點權最大是多少

 

建模:

等於:總權值-最小點權覆蓋

 

證明:

扔掉覆蓋的點的剩餘點一定是一個獨立集

而且,根據覆蓋=點數-獨立集

對於一個固定的點覆蓋,獨立集已經不能更大。

所以,一個固定的點覆蓋下,最大獨立集是確定的。兩者呈現一一對應的關係。

而總權值不變,所以選擇扔掉的覆蓋集總權值最小即可。

所以,最大點權獨立集=總權值-最小點權覆蓋

 

 

例題:

方格取數問題

在一個有m*n 個方格的棋盤中

每個方格中有一個正整數

現要從方格中取數,使任意2 個數所在方格沒有公共邊

求取出的數的總和最大是多少。

題解:

將棋盤國際象棋黑白染色

然後連邊

然後最大點權獨立集即可。