上下限最大流

一、有上下限的最大流:首先,每条边的下限是必须要满足的。增加附加源点S和附加汇点T,原来的源点和汇点为s和t。对于原图G(s,t,low[u][v],high[u][v])构建相应的新图D(S,T,E),E包括,<t,s,INF>,<S,i,in[i]>,<i,T,out[i]>,<u,v,high[u][v]-low[u][v]>。其中,in[i]表示进入i的边的下限之和,out[i]表示离开i的边的下限之和。设sum为所有点的in值之和。然后求S到T的最大流A,若A不等于sum则不存在满足题意的可行流。否则删去边<t,s,INF>,接着求s到t的最大流B,则最大流为A+B,此时每条边的实际流量为此时每条边的流量加上每条边的下限。

二、有上下限的最小流,有两种方法:

(1)构建的新图D和上面的D是一样的。也是先求S到T的最大流,此时记录<t,s>边的流量A,然后删掉边<t,s>,接着求t到s的最大流B,则答案为A-B。此时A-B有可能为0,原因是这个图本来最小流为0,由于有环的存在这个图可以自给自足,此时增加S到s的边<S,s,B-A>,再跑S到t(此时是原来图的汇点t)的最大流。这样,每条边的流量加上下限就是每条边的实际流量。

(2)二分t到s的上限,x=in[i]-out[i],x>=0,连边<S,i,x>,sum+=x,否则<i,T,-x>。求S到T的最大流,大于等于sum则可行。

 

转载于:https://www.cnblogs.com/jianglangcaijin/p/6036340.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值