• [学习笔记]有上下界的网络流


    对于有上下界的网络流问题,涉及判是否有解及求解最大/小流,费用流.

    基本建图

    建立超级源\(S\),超级汇\(T\).
    对于边\((u,v)\)=\([l,u]\),将其拆成三条边:

    1. \((S,v)=l\);
    2. \((u,v)=u-l\);
    3. \((u,T)=l.\)

    因为对于边\((u,v)=[l,u]\),
    \(u\)至少流出\(l\)的流量,\(v\)至少流入\(l\)的流量,所以建边\((S,v)=l,(u,T)=l\);
    \(u->v\)\(u-l\)的流量是自由流,所以建边\((u,v)=u-l\).

    显然\(S->u,u->T\)有可能有多条边,合并这些边,节省空间.

    无源汇

    可行流

    \(S->T\)的最大流,从\(S\)出发的边全部满流则可行,因为说明所有边的下界均已满足.每条边的实际流为自由流+流量下界.

    有源汇

    可行流

    加一条边\((t,s)=+\infty\).转成无源汇.
    \(S->T\)的最大流,从\(S\)出发的边全部满流则可行.

    最大流

    求出可行流后,在残量网络上求\(s->t\)的最大流.

    理由:
    \(s->t\)跑的是\(S->T\)的反向边,这时下界的流量已经在反向边中了,\((t,s)=+\infty,S,T\)不会影响到最大流,所以是合法的答案.

    最小流

    先不加\((t,s)=+\infty\)这条边,这时跑\(S->T\)的最大流可求出\(t->s\)的最大流,也就是在合法的情况下最多能减去多少.
    然后再加\((t,s)=+\infty\)这条边,此时残量网络\(S->T\)的最大流即为答案.

    2017-03-14 11:20:47

  • 相关阅读:
    Linux下安装maven
    非连续性及反脆弱
    高手是怎么练成的
    思维型大脑
    编写文档五轮模式
    Nginx初识
    ida快捷键
    ida+gdb调试任意平台
    gcc常用命令使用
    ida调试ios应用
  • 原文地址:https://www.cnblogs.com/AireenYe/p/15601026.html
Copyright © 2020-2023  润新知