【转载】最大权闭合子图 【网络流】
原文鏈接
定義
所謂閉合子圖就是給定一個有向圖,從中選擇一些點組成一個點集V。對于V中任意一個點,其后續節點都仍然在V中。
建模
首先建立源點s和匯點t,將源點s與所有權值為正的點相連,容量為權值;將所有權值為負的點與匯點t相連,容量為權值的絕對值;權值為0的點不做處理;同時將原來的邊容量設置為無窮大。
結論:最大權閉合子圖的權值等于所有正權點之和減去最小割。
證明
接下來來證明這個結論,首先我們要證明兩個引理:
1. 最小割一定是簡單割
簡單割指得是:割(S,T)中每一條割邊都與s或者t關聯,這樣的割叫做簡單割。
因為在圖中將所有與s相連的點放入割集就可以得到一個割,且這個割不為正無窮。而最小割一定小于等于這個割,所以最小割一定不包含無窮大的邊。因此最小割一定一個簡單割。
2. 簡單割一定和一個閉合子圖對應
閉合子圖V和源點s構成S集,其余點和匯點t構成T集。
首先證明閉合子圖是簡單割:若閉合子圖對應的割(S,T)不是簡單割,則存在一條邊(u,v),u∈S,v∈T,且c(u,v)=∞。說明u的后續節點v不在S中,產生矛盾。
接著證明簡單割是閉合子圖:對于V中任意一個點u,u∈S。u的任意一條出邊c(u,v)=∞,不會在簡單割的割邊集中,因此v不屬于T,v∈S。所以V的所有點均在S中,因此S-s是閉合子圖。
由上面兩個引理可以知道,最小割也對應了一個閉合子圖,接下來證明最小割就是最大權的閉合子圖。
首先有割的容量C(S,T)=T中所有正權點的權值之和+S中所有負權點的權值絕對值之和。
閉合子圖的權值W=S中所有正權點的權值之和-S中所有負權點的權值絕對值之和。
則有C(S,T)+W=T中所有正權點的權值之和+S中所有正權點的權值之和=所有正權點的權值之和。
所以W=所有正權點的權值之和-C(S,T)
由于所有正權點的權值之和是一個定值,那么割的容量越小,W也就越大。因此當C(S,T)取最小割時,W也就達到了最大權。
轉載于:https://www.cnblogs.com/2016gdgzoi471/p/9476862.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的【转载】最大权闭合子图 【网络流】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dapper 中使用sql in 关键字
- 下一篇: 使用反射处理protobuf数据结构