dalao博客传送门:有上下界的网络流学习笔记by liu_runda。
定义
好像没什么好定义的, 就是每条边的流量除了上界还有下界。
无源汇上下界可行流
ps:这个问题的算法是其他上下界网络流的基础,所以一定要完全背板理解。
无源汇上下界可行流指的是没有源汇的上下界网络流,也就是说只需要满足每个点流量守恒即可,所以一般求可行流。
由于一般的网络流只有上界,所以我们想到先让所有边的流量都等于下界,然后再加上一些附加流,使得所有边流量守恒(程序实现时不能够将流量设为下界,而是要将流量设为0,同时将容量设为上界-下界,使得流量只增不减)。
假设现在所有边的流量已经等于下界了。我们对于一个点
i
,记录
1.
num[i]=0
,这说明
i
点是流量守恒的,不需要进行处理。
2.
3.
num[i]<0
,这说明
i
点出>入,我们需要为这多余的流找个去处,于是连一条
我们会发现,如果存在一种可行流使得
SS
->
TT
满流(即
SS
连出的所有边都满载,且由于
∑ni=1num[i]=0
,所以等价于
TT
连入的所有边都满载),那么就说明原网络存在可行流。而如果有满载,显然应该是最大流。
这样的话,如果有解,原网络中每条边的流量是多少呢?其实就是下界+流量(附加流)。
有源汇上下界可行流
顾名思义就是在上个问题的基础上加了源
S
和汇
其实想法非常简单,再连一条
T
->
可行流的流量显然就是
有源汇上下界最大流
我们先求出一个有源汇上下界可行流,但这个流并不一定是最大流,所以我们要想办法修正可行流,使得可行流变成最大流。
这并不困难:我们刷一下
有源汇上下界最小流
由于有了下界,于是冒出来了“最小流”,和最大流的想法一样,我们用可行流减少尽量多的流从而修正出最小流。
等等……好像没有这种操作,怎么办啊?其实我们发现这和求
S
->
这样就和有源汇上下界最大流一样了。
模板题
无源汇上下界可行流:ZOJ2314,题解传送门。
有源汇上下界最大流:ZOJ3229,题解传送门。
有源汇上下界最小流:BZOJ2502,题解传送门。