zoukankan      html  css  js  c++  java
  • 有上下界网络流学习笔记

    有上下界网络流学习笔记

    1.有(无)源汇有上下界最小费用可行流:算法的核心思想是补流。先判断原图是否有源汇,若有则连边(t o s(infty/0));随后新建超级源汇(S)(T);然后对于每一条边(x o y),连边(x o y(high-low/w));接着对每一个点(x),计(delta)为该点入边流量下界之和减去该点出边流量下界之和,如果(delta)为正数,说明接下来有一部分流量要从(x)流出,则连边(S o x(delta/0));若(delta)为负数,说明需要有一部分流量流入(x),则连边(x o T(-delta/0)),最后做费用流在加上必须流的费用即可。

    例1.Luogu4043 支线剧情

    模板题,没啥好说的。

    2.无源汇有上下界可行流:算法的核心是先建出初始流,再通过补充附加流,满足流量平衡(其实和1是一样的)。建立附加源汇(S)(T),然后对于每一条边(x o y),连边(x o y(high-low));接着对每一个点(x),计(delta)为该点入边流量下界之和减去该点出边流量下界之和,如果(delta)为正数,说明接下来有一部分流量要从(x)流出,则连边(S o x(delta));若(delta)为负数,说明需要有一部分流量流入(x),则连边(x o T(-delta))。如果我们能够找到使后面所有附加上的边都满流的方案,那么我们就得到了可行流,所以对新图做最大流即可。若存在方案,那么最后每条边的流量为最大流中的流量加上原图中的流量下界。

    例2.ZOJ2314

    仍然是模板题。

    3.有源汇有上下界最小/最大流:连边(t o s(infty)),先用2中所述方法求出可行流,然后删去(t o s(infty)),从(s)(t)在原来的残量网络上增广即可得到最大流,因为这样既不破坏流量平衡,又不会不符合上下界,同时最大化了流量;最小流有两种做法:1.因为反向边的流量增加就是正向边的流量减小,最小流是正向边流量最小化,所以(s o t)最小流就是反向边流量最大化,即(t o s)最大流,设第一次增广中(t o s(infty))的流量为(x1),删除(t o s(infty))反过来增广最大流为(x2),那么最小流即为(x1-x2)。2.(这个做法我也不是很明白,如果有大佬知道原因,希望能给我讲解一下)先求超级源汇的最大流,然后连边(t o s(infty)),继续增广求超级源汇的最大流,答案即为新边(t o s(infty))的实际流量,因为第一次增广时流量已经尽量往其他边流,那么加上这条新边后,就尽可能减小了最终答案。

    例3.BZOJ2502

    还有一些练习题,等我写了再贴在这吧。

  • 相关阅读:
    iOS 记录近期遇到的几个bug
    iOS转场动画封装
    iOS 页面滑动与标题切换颜色渐变的联动效果
    Realm数据持久化方案的简单介绍和使用(二)
    某互联网科技公司的一道逻辑面试题
    js获取本月,本季度,上个季度,本周,上周的起始和结束时间
    CSS样式说明
    a标签的样式
    CSS3的> 和@
    CSS中的position定位
  • 原文地址:https://www.cnblogs.com/pkh68/p/10574872.html
Copyright © 2011-2022 走看看