zoukankan      html  css  js  c++  java
  • 最大权闭合子图

    最大权闭合子图

    定义

    闭合图:在一个图(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

    作者:_kangkang
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    C# 面向对象系列笔记(三)
    C# 面向对象系列笔记(二)
    分享一下: C# 面向对象系列笔记(一) ,希望对大家有所帮助
    新人报到
    VUE+ELEMENT-UI的后台项目封装组件--查询form的封装
    vue+element-ui的后台项目封装组件--面包屑的封装
    数组对象循环格式化时间撮的转换
    VUE+ELEMENT-UI的后台项目封装组件--table的封装
    css的样式问题
    vue项目兼容es6语法跟IE浏览器
  • 原文地址:https://www.cnblogs.com/kangkang-/p/11312773.html
Copyright © 2011-2022 走看看