有上下界的网络流

不知道为什么一直不会这个东西,可能是太懒了


无源汇上下界可行流:

我们知道最基本的网络流就是有上界的网络流,那么加了一个下界有什么不一样呢?

一个大胆的想法:
默认每条边流到了下界,然后把边的流量限制设为上限-下限,直接跑。

这显然是不对的,不然可行流不就一定存在了吗?

我们发现这样不能满足网路流的流量守恒。

如果默认每条边流到了下界,那么对于一个点来说,它就可能不满足流量守恒了。

q[i]q[i]q[i]为i这个点入边下界之和-出边下界之和,q[i]≠0q[i]≠0q[i]̸=0显然是不行的

q[i]>0q[i]>0q[i]>0说明流出少了,我们需要分一点流。
q[i]&lt;0q[i]&lt;0q[i]<0说明流出多了,我们需要补一点流。

新建超级源ssssss和超级汇tttttt

q[i]&gt;0q[i]&gt;0q[i]>0,ss−&gt;i  r=q[i]ss-&gt;i~~r=q[i]ss>i  r=q[i]
q[i]&lt;0q[i]&lt;0q[i]<0,i−&gt;tt  r=q[i]i-&gt;tt~~r=q[i]i>tt  r=q[i]

对新图跑最大流,如果能把附加边跑满,即最大流=∑[q[i]&gt;0]∗q[i]=\sum[q[i]&gt;0]*q[i]=[q[i]>0]q[i],就说明至少能在流量平衡的情况下使每条边流到下界,也就是有可行流。

有源汇上下界可行流:

t−&gt;s  r=∞t-&gt;s~~r=∞t>s  r=变成循环流

然后与上面的一样。

有源汇上下界最大流:

做完有源汇上下界可行流后,把t->s和ss、tt去掉,再从S开始跑最大流。

原图最大流等于两次最大流之和。

有源汇上下界最下流:

做完有源汇上下界可行流后,把t->s和ss、tt去掉,再从T开始跑最大流。

原图最小流等于第一次最大流-第二次最大流。

有源汇上下界最小(大)费用可行流:

边加入和流量和之前的是一样的。

费用的话:
ss、tt的边费用为0.

其它边的费用就是本来的费用。

从ss开始,跑最小费用最大流,

若有解,费用=所有边的下界*费用+跑的费用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值