网络流——最大权闭合子图
网络流——最大权闭合子图
定义
- 闭合子图:有向图的闭合子图是指有向图中的一个子图\(V\),对于\(\forall <u,v>\),若\(u\in V\),则\(v\in V\)。
- 最大权闭合子图:点权和最大的闭合子图。
算法
最大权闭合子图的求解一般使用网络流来求解。
先给出算法,
对于所有正权点从S向这个点连一条边,边权为点权
对于所有负权点从这个点向T连一条边,边权为点权的相反数。
对于原图中的边,边权设为inf。
用所有正边权的和减去最小割就可以了。
正确性显然
考虑为什么是最优的
最小割=(不选的正权之和+|要选的负权|)
最大权闭合子图=(正权之和-不选的正权之和-要选的负权绝对值之和)=正权值和-最小割
所以最小化最小割就可以了