码迷,mamicode.com
首页 > 其他好文 > 详细

带有上下界的网络流

时间:2017-08-14 17:23:32      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:上界   term   review   .net   添加   ast   row   ext   答案   

转自:http://blog.csdn.net/clove_unique

f(u,v)表示u->v这条边的实际流量 
b(u,v)表示u->v这条边的流量下界 
c(u,v)表示u->v这条边的流量上界 
在一个无源汇的普通网络流图中,满足

  • 0f(u,v)c(u,v)
  • f(u,i)=f(i,v)

分别称为流量限制条件和流量平衡条件 
而在有上下界的网络流图中,由于多了流量下界b(u,v)的限制,满足

  • b(u,v)f(u,v)c(u,v)
  • f(u,i)=f(i,v)

无源汇可行流

建图方法

将有上下界的网络流图转化成普通的网络流图

  • 首先建立附加源点ss和附加汇点tt
  • 对于原图中的边x->y,若限制为[b,c],那么连边x->y,流量为c-b
  • 对于原图中的某一个点i,记d(i)为流入这个点的所有边的下界和减去流出这个点的所有边的下界和 
    • 若d(i)>0,那么连边ss->i,流量为d(i)
    • 若d(i)<0,那么连边i->tt,流量为-d(i)

求解方法

在新图上跑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
  • 对于原图中的边x->y,若限制为[b,c],费用为cost,那么连边x->y,流量为c-b,费用为cost
  • 对于原图中的某一个点i,记d(i)为流入这个点的所有边的下界和减去流出这个点的所有边的下界和 
    • 若d(i)>0,那么连边ss->i,流量为d(i),费用为0
    • 若d(i)<0,那么连边i->tt,流量为-d(i),费用为0
  • 连边t->s,流量为inf,费用为0

求解方法

跑ss->tt的最小费用最大流 
答案即为(求出的费用+原图中边的下界*边的费用)

证明

注意: 
有上下界的费用流指的是在的最小费用流 
在满足流量限制条件和流量平衡条件并且满足的情况下的最小费用流 
也就是说,有上下界的费用流只需要满足网络流的条件就可以了,而普通的费用流是满足一般条件并且满足是最大流的基础上的最小费用

证明同 有源汇的可行流

带有上下界的网络流

标签:上界   term   review   .net   添加   ast   row   ext   答案   

原文地址:http://www.cnblogs.com/lyqlyq/p/7358776.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!