最大权闭合子图

最大权闭合子图

定义

闭合图:在一个图\(G=(V,E)\)中,若点集\(V\)中任意点连接的任意出弧,所指向的终点也在\(V\)中,则图\(G\)为闭合图。

对于一个有向图,每一个点都有一个权值(可以为正或负或0),选择一个权值和最大的子图,满足子图中每个点的后继结点也在这个子图里,这个子图就叫最大权闭合子图。


详解

解法:

  1. 先抽象出源点、汇点;

  2. 将权值为正的点和源点连接,边的容量为这个点的权值;

  3. 将权值为负的点和汇点连接,边的容量为这个点权值的绝对值;

  4. 然后除了源点、汇点之外的点原本怎么连就怎么连,且容量为无穷大;

  5. 最大权闭合子图权值 = 所有权值为正的点权值之和 - 以上构建的流网络的最小割(也即最大流)

详细描述如下:

首先有一个有向连通图\(G\),每个点带有一个权值,例如:
图片1

此时,构建一个源点\(s\),一个汇点\(t\),所有的点按权值的正负连接到\(s\)\(t\)上,转换成一个边权值有向图,如下图:

图片2

可以得出以下性质:

  1. 该流网络的最小割,是简单割;

    简单割:割集中所有的边,都与\(s\)\(t\)相连接。

    显然的,因为不与连的边,权值都是INF,最小割不可能割在INF的边上;

  2. 该图中的每一个简单割产生的两个子图,我们记含有源点\(s\)的是图\(S\)\(S\)中属于原图\(G\)的结点和边(即去掉\(s\)和与\(s\)相连的边)构成图\(S'\),含有汇点\(t\)的是图\(T\)\(T\)中属于原图\(G\)的结点和边(即去掉\(t\)和与\(t\)相连的边)构成图\(T'\),则图\(S'\)是闭合图;

    证明:① 简单割内不包含边权为INF的边,即割边不含有连通\(S'\)\(T'\)的边;

       ② 流网络的割令图\(S\)中没有边与图\(T\)连通,又\(S'\in S, T'\in T\),则图\(S'\)中没有边与图\(T'\)连通;

       那么,图\(S'\)所有的边都只能连接在\(S’\)之内,即为闭合图。

    样例:
    图片4
    图片3

    上图中,图\(S\)去掉\(s\)和容量为7的边即为图\(S'\),图\(T\)去掉\(t\)和容量为6的边即为\(T'\),显然图\(S'\)为原图\(G\)的一个闭合子图。

  3. 最小割产生的图\(S'\)为原图\(G\)的最大权闭合子图;

    我们记割集中,所有连接在\(s\)上的边的权值和为\(x_1\),所有连接在\(t\)上的边的权值和为\(x_2\),而割集中所有边权值和为\(X=x_1+x_2\);记图\(S'\)中所有点的权值和为\(W\),记其中正权值之和为\(w_1\),负权值之和为\(-w_2\),故\(W = w_1 - w_2\)

    \(W + X = w_1 - w_2 + x_1 + x_2\),由于\(x_2 = w_2\)(因为图\(S'\)中所有负权值的点,必然连接到\(t\)点,而图\(S'\)必然要与\(t\)分割开;故“割集中连接在\(t\)点上的边权值和”就是“图\(S'\)中所有负权值点的权值之和取负”),因而\(W + X = w_1 + x_1\)

    显然的,\(w1 + x1\)是整个图\(G\)中所有正权值之和,记为\(sum\),故\(W=sum - X\),即 “图\(S'\)中所有点的权值和” = “整个图\(G\)中所有正权值之和” - “割集中所有边权值和”;

    由于\(sum\)为定值,只要我们取最小割,则“图\(S'\)中所有点的权值和”就是最大的,即此时图\(S'\)为图\(G\)的最大权闭合子图;

最后,我们就有了求解这类问题的完整思路:

  ① 先记录整个图中,所有正点权值的和;

  ② 根据问题模型建立对应流网络,求最大流,最大流在数值上等于最小割,故我们得到了流网络的最小割;

  ③ “所有正点权值的和”减去“流网络的最小割”,即得最大权闭合子图的权值和。




修改自https://www.cnblogs.com/dilthey/p/7565206.html

posted @ 2019-08-07 01:24  _kangkang  阅读(572)  评论(0编辑  收藏  举报