f(u,v) 表示u->v这条边的实际流量
b(u,v) 表示u->v这条边的流量下界
c(u,v) 表示u->v这条边的流量上界
在一个无源汇的普通网络流图中,满足
分别称为流量限制条件和流量平衡条件
而在有上下界的网络流图中,由于多了流量下界 b(u,v) 的限制,满足
将有上下界的网络流图转化成普通的网络流图
在新图上跑ss到tt的最大流
若新图满流,那么一定存在一种可行流
此时,原图中每一条边的流量应为新图中对应的边的流量+这条边的流量下界
在原图中,假设每条边的实际流量为 f(u,v)=b(u,v)+g(u,v)
其中 g(u,v)≤c(u,v)−b(u,v)
我们可以将原图中的边改为上界为 c(u,v)−b(u,v) 的边,变成一个普通的网络流图
经过以上的改造, g(u,v) 实际上是新图中边u->v的实际流量,原图中的实际流量 f(u,v)=b(u,v)+g(u,v)
但是如果在这个新图中直接求可行流的话是错误的
举个栗子
原图
按照上面的方法改造过的新图
这个图的可行流为1,还原成原图的实际流量为
很显然满足流量限制条件,但是不满足流量平衡条件
由于需要满足流量平衡条件
∑f(u,i)=∑f(i,v)
∑[b(u,i)+g(u,i)]=∑[b(i,v)+g(i,v)]
∑b(u,i)−∑b(i,v)=∑g(i,v)−∑g(u,i)
令 d(i)=∑b(u,i)−∑b(i,v)
当 d(i)>0 时
∑g(i,v)=∑g(u,i)+d(i)
所以需要一条边流量为 d(i) 来补流
当 d(i)<0 时
∑g(u,i)=∑g(i,v)+[−d(i)]
所以需要一条边流量为 −d(i) 来分流
可以发现,添加的所有与附加源点或者附加汇点相连的边必须满流,原图才有可行流
证毕
在原图中添加一条边t->s,流量限制为[0,inf]
即让源点和汇点也满足流量平衡条件
这样就改造成了无源汇的网络流图
其余方法同上
同 无源汇可行流
同 无源汇可行流
同有源汇可行流
在新图上跑ss到tt的最大流
若新图满流,那么一定存在一种可行流
记此时 ∑f(s,i)=sum1
将t->s这条边拆掉,在新图上跑s到t的最大流
记此时 ∑f(s,i)=sum2
最终答案即为 sum1+sum2
添加附加源汇的作用:为了满足流量平衡条件,在新图中进行相应的补流或分流
只要连接附加源汇的边满流,新图中s->t的任意一种可行流都是原图的可行流
跑ss->tt的最大流了之后,相当于是使连接附加源汇的边满流,进而求出了一种可行流
再将t->s的边拆掉(使s->t变成一个有源汇的网络流图),跑s到t的最大流,加上跑出来的最大流即为原图中一种可行的最大流
同 无源汇可行流
求ss->tt最大流
连边t->s,inf
求ss->tt最大流
答案即为边t->s,inf的实际流量
第一遍做的时候并无t->s这条边,所以s->t的流量已经尽力往其它边流了
加上t->s这条边后,流过这条边的都是些剩余的流不到其他边的流量,从而达到尽可能减少T->S这边上的流量的效果,即减小了最终答案。
将有上下界的网络流图转化成普通的网络流图
跑ss->tt的最小费用最大流
答案即为(求出的费用+原图中边的下界*边的费用)
注意:
有上下界的费用流指的是在 满足流量限制条件和流量平衡条件的情况下 的最小费用流
而不是 在满足流量限制条件和流量平衡条件并且满足 最大流 的情况下的最小费用流
也就是说,有上下界的费用流只需要满足网络流的条件就可以了,而普通的费用流是满足一般条件并且满足是最大流的基础上的最小费用
证明同 有源汇的可行流
重点理解“补流”和“分流”的作用
注意流的“等效”