zoukankan      html  css  js  c++  java
  • 关于网络流最小割的一些小知识

    1.输出任意一种最小割的方案:

    在运行完网络流算法之后,在残量网络上,s和t之间不连通了
    进行一边dfs/bfs,求出从s出发能到达的点集S,和不能到达的点集T
    我们割掉了一组边,把原图划分成了S和T两个点集
    所有从S跨越到T的满流边构成了一个最小割方案

    2.判断一条边是否满流:

    运行一次最大流算法,得到一个残量网络
    取残量网络上的一条满流边(u, v),判断这条边是否一定满流
    对残量网络运行Tarjan算法,求出所有SCC
    当u和v不属于同一个SCC的时候,这条边一定满流
    否则,我们可以在SCC中找到一个包含这条边的反向边的环,沿着环增广一次,仍然不破坏流量平衡,但是这条边已经不满流了

    3.判断某一条边是否可能为最小割中的一条

    所有一定满流的边都可能为最小割

    4.判断某条边是否一定出现在最小割中

    首先还是对残量网络求SCC
    考虑一条满流边(u, v),判断她是否一定出现在最小割中
    当u和s属于同一个SCC,并且v和t属于同一个SCC的时候,这条边一定出现在最小割中

    5.输出在最小割的最小边数

    设总边数为m,所有的边权都乘m+1然后再+1

    用这个新的图跑最大流然后结果/(m+1)就是最小割

    结果%(m+1)就是最小边数

  • 相关阅读:
    数据结构与算法4—队列
    栈的应用——括号匹配
    迷宫求解
    python的socket编程
    数据结构与算法3—栈
    数据结构与算法2—链表
    数据结构与算法1—线性表
    增量解析
    ElementTree类
    节点序列化
  • 原文地址:https://www.cnblogs.com/mybing/p/8651898.html
Copyright © 2011-2022 走看看