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

上下界网络流

时间:2018-02-22 21:34:06      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:合并   需要   大于   流量   附加   反向   如何   定义   minus   

无源汇上下界可行流

一些点,一堆边,每条边要满足流量限制[l,r][l,r]

先令每条边流量等于流量下限,得到初始流,初始流可能不满足流量守恒,再建出残量网络(上限-下限),求出可能不满足流量守恒的附加流,使附加流和初始流合并后满足流量守恒

如何建残量网络

定义a[i]a[i]表示初始流中流入量-流出量
a[i]>0a[i]>0表示流入量大于流出量,附加量需要流入量小于流出量
a[i]<0a[i]<0表示流入量小于流出量,附加量需要流入量大于流出量
a[i]=0a[i]=0表示流入量=流出量,附加中流入量等于流出量

问题变为多余的流入量和流出量从哪来

新建虚拟结点ssss和tttt
对于a[i]>0a[i]>0,附加量流出量大于流入量,ii向tttt连一条a[i]a[i]的边
a[i]<0a[i]<0,附加量流入量大于流出量,ssss向ii连一条-a[i]a[i]的边

若在残量网络上一个满流,这个流就是我们需要的附加流
最后,每条边的可行流==流量下界++附加流中这条边的流量

有源汇上下界可行流

有原点ss和汇点tt,还有一些边,每条边有一个限制[l,r][l,r]

即使有了源和汇,也可以转换为无源汇,因为ss的流出量=t=t的流入量,就从tt向ss连一条下界为00上界为+\infty+∞的边,跑无源汇上下界可行流,最终的可行流就是tt到ss的边上的流量

有源汇上下界最大流

有原点ss和汇点tt,还有一些边,每条边有一个限制[l,r][l,r],求出最大流

先求出可行流,再从原图残量网络中求出最大流,最大流就是可行流++最大流

有源汇上下界最小流

有原点ss和汇点tt,还有一些边,每条边有一个限制[l,r][l,r],求出最小流

先求出可行流
因为dinic中,反向边流量增加==正向边流量减小,所以,从tt向ss求一边最大流,可行流大小-tt到ss的最大流就是最小流

 

上下界网络流

标签:合并   需要   大于   流量   附加   反向   如何   定义   minus   

原文地址:https://www.cnblogs.com/heower/p/8459704.html

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