483 字
2 分钟
上下界网络流笔记

无源汇可行流#

将上下界的网络流转化为普通网络流。

建图:

  • 添加源点 SS 与汇点 TT
  • 对于原图中的边 a→ba \to b 流量限制为[c,d][c, d], 则连边 a→ba \to b, 流量为 d−cd-c
  • 对于原图中的每一个点 ii , 记 d(i)d(i) 为流入这个点的所有边的下界 −- 流出这个点的所有边的下界
    • 若d(i)>0d(i) > 0连 S→iS \to i, 流量为 d(i)d(i)
    • 若d(i)<0d(i) < 0连 i→Ti \to T, 流量为 −d(i)-d(i)

在新图上跑 S→TS \to T 的最大流
若新图满流则原图存在可行流
原图中边流量为新图中对应边的流量加下界。

有源汇可行流#

建图:

  • 在原图中加一条 t→st \to s 的边流量为 [0,INF][0, INF]
  • 用无源汇求解

有源汇最大流#

建图 同上

在新图上跑 S→TS \to T 最大流 记此时 ∑f(s,i)=sum1\sum{f(s, i)} = sum1
讲 t→st \to s 的边拆掉, 跑 s→ts \to t 的最大流
记此时 ∑f(s,i)=sum2\sum{f(s, i)} = sum2
则答案为 sum1+sum2sum1+sum2

有源汇最小流#

建图方法同无源汇可行流
求 S→TS \to T 最大流
连边 t→s,INFt \to s,INF
求 S→TS \to T 最大流
答案为 t→st \to s 的实际流量

有源汇费用流#

将上下界的网络流转化为普通网络流。

建图:

  • 添加源点 SS 与汇点 TT
  • 对于原图中的边 a→ba \to b 流量限制为 [c,d][c, d], 费用为 vv , 则连边 a→ba \to b , 流量为 d−cd-c , 费用为 vv
  • 对于原图中的每一个点 ii, 记 d(i)d(i) 为流入这个点的所有边的下界 −- 流出这个点的所有边的下界
    • 若d(i)>0d(i) > 0连 S→iS \to i, 流量为 d(i)d(i), 费用为 00
    • 若d(i)<0d(i) < 0连 i→Ti \to T, 流量为 −d(i)-d(i), 费用为 00

连边 t→st \to s,流量为 INFINF,费用为 00

跑 S→TS \to T 的最小费用最大流
答案为 ans+ans+原图中边的下界×\times边的费用

上下界网络流笔记
https://www.nekomio.com/posts/122/
作者
NekoMio
发布于
2018-01-16
许可协议
CC BY-NC-SA 4.0