图论 —— 网络流 —— 最小割 —— 最大权闭合子图
【概述】
給出一個(gè)有向圖,每一個(gè)點(diǎn)都有一個(gè)權(quán)值,現(xiàn)在要選擇一個(gè)權(quán)值和最大的子圖,使得每個(gè)點(diǎn)的后繼都在子圖中,這個(gè)子圖就稱為最大權(quán)閉合子圖。
如上圖,能選的子圖有:?、{1,2,3,4,5,6}、{3,6}、{2,4,5,6}、{4,6}、{5,6}、{6}、,他們的權(quán)值分別為:0、16、12、4、2、4、5
因此最大閉合子圖為:{1,2,3,4,5,6},權(quán)值為 16
【解法】
最大權(quán)閉合子圖可以轉(zhuǎn)為最小割問題來求解。
首先記錄整個(gè)圖中所有正點(diǎn)權(quán)之和,然后建立相應(yīng)的流量網(wǎng)絡(luò)
設(shè)一個(gè)超級(jí)源點(diǎn) S 與一個(gè)超級(jí)匯點(diǎn) T,從源點(diǎn) S 向每個(gè)正權(quán)點(diǎn)連一條容量為權(quán)值的邊,每個(gè)負(fù)權(quán)點(diǎn)向匯點(diǎn) T 連一條容量為權(quán)值的絕對(duì)值的邊,原圖中的邊容量均設(shè)為 INF
由于原圖的邊都是無窮大的,那么割邊一定是與源點(diǎn) S 或匯點(diǎn) T 相連的,那么就有以下的含義:
- 割掉 S 與 i 的邊,表示不選擇 i 點(diǎn)作為子圖的點(diǎn)
- 割掉 i 與 T 的邊,表示選擇 i 點(diǎn)為子圖的點(diǎn)
- 如果 S?與 i 有邊,表示 i 存在子圖中
- 如果 i 與 T 有邊,表示 i 不存在于子圖中
在建完圖后,利用 Dinic 求最小割,割掉后與源點(diǎn) S 連通的點(diǎn)就構(gòu)成了最大權(quán)閉合子圖,最小割的值是不選的正權(quán)之和與要選的負(fù)權(quán)絕對(duì)值之和,那么最大權(quán)閉合子圖的權(quán)值就是:正權(quán)值之和-最小割
總結(jié)
以上是生活随笔為你收集整理的图论 —— 网络流 —— 最小割 —— 最大权闭合子图的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Factors of Factorial
- 下一篇: 循环数组最大字段和(51Nod-1050