• 最大权闭合子图


    引用来自http://www.cnblogs.com/wuyiqi/archive/2012/03/12/2391960.html的思想;

    首先有一个有向连通图,每个点带有一个权值,例如:

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

    (注:点权为0的点可以忽略,对结果没有影响)

    这时,可以得到小结论:

    ①该带边权有向图的关于s-t最小割,是简单割;

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

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

      这早在文章http://www.cnblogs.com/dilthey/p/7401563.html中就有出现提到过,实际上,这个带边权有向图就是二分图;

    ②该图中的每一个简单割产生的两个子图,我们记含有点s的是图S,含有点t的是图T,则图S是闭合图;

      闭合图:在一个图中,我们选取一些点构成集合,若集合中任意点连接的任意出弧,所指向的终点也在V中,则这个集合以及所有这些边构成闭合图。

      证明:简单割内不包含边权为INF的边,即不含有连通两个图的边(除了连接在t点上的边之外);

         即,图S中没有边与图T连通,那么,所有的边都只能连接在图S之内,即为闭合图。

      样例:

              

    ③最小割产生的图S和图T,图S为最大权闭合子图;

      最大权闭合子图:在整个图中,有多个子图是满足闭合图的条件的,其中点权值之和最大的,为最大权闭合子图;

      因为割集中所有的边,不是连接在s上,就是连接在t上;

      我们记割集中,所有连接在s上的边的权值和为x1,所有连接在t上的边的权值和为x2,而割集中所有边权值和为X=x1+x2;

      又,记图S中所有点的权值和为W,记其中正权值之和为w1,负权值之和为 - w2,故W = w1 - w2;

      而 W + X = w1 - w2 + x1 + x2,由于x2 = w2

        (因为图S中所有负权值的点,必然连接到t点,而图S必然要与t分割开;故割集中,“连接在t点上的边权值和”就是“图S中所有负权值点的权值之和,取负”)

      因而W + X = w1 + x1;

      而显然的,w1 + x1是整个图中所有正权值之和,记为SUM;

      故W = SUM - X,即 “图S中所有点的权值和” = “整个图中所有正权值之和”  - “割集中所有边权值和”;

      然后,因为SUM为定值,只要我们取最小割,则“图S中所有点的权值和”就是最大的,即此时图S为图S为最大权闭合子图;

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

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

      ②建立对应流网络,求最大流,最大流在数值上等于最小割,故我们得到了流网络的s-t最小割;

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

  • 相关阅读:
    给msde加装企业管理器
    InterBase 数据库与驱动 版本不同
    delphi 演示数据路径
    TNetHTTPClient 使用
    MYSQL之库操作
    MYSQL之数据操作
    MYSQL之表操作
    MYSQL之视图、触发器、存储过程、函数、事物、数据库锁和数据库备份
    数据库三范式详解
    MYSQL之索引原理与慢查询优化
  • 原文地址:https://www.cnblogs.com/dilthey/p/7565206.html
Copyright © 2020-2023  润新知