有上下界的网络流 做法总结

39 篇文章 0 订阅
18 篇文章 0 订阅

无源汇可行流

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

首先建立附加源点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的最大流
若新图满流,那么一定存在一种可行流
此时,原图中每一条边的流量应为新图中对应的边的流量+这条边的流量下界

模板:LOJ 115 https://blog.csdn.net/humveea6/article/details/80355577

有源汇可行流

建图方法
在原图中添加一条边t->s,流量为inf
即让源点和汇点也满足流量平衡条件
这样就改造成了无源汇的网络流图,其余建图方法与无源汇可行流相同。

有源汇有上下界最大流

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

首先建立附加源点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)
(以上与无源汇可行流相同)
在原图中添加一条边t->s,流量为inf
即让源点和汇点也满足流量平衡条件
这样就改造成了无源汇的网络流图
(以上与有源汇可行流相同)
在新图上跑ss到tt的最大流
若新图满流,那么一定存在一种可行流
记此时∑f(s,i)=sum1 ,即此时t->s的最大流,也就是求反向边s->t的流量
将t->s这条边拆掉,在新图上跑s到t的最大流
记此时∑f(s,i)=sum2 ,即maxflow(s,t)
最终答案即为sum1+sum2

模板:LOJ 116 https://blog.csdn.net/humveea6/article/details/80516684

有源汇有上下界最小流

建图方法
将有上下界的网络流图转化成普通的网络流图
首先建立附加源点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)
(以上与无源汇可行流相同)
求res=ss->tt最大流
连边t->s,inf
求res+=ss->tt最大流
如果res!=sum也就是期望中的满流,那么就没有可行解。
需要格外注意最小流判断是否有可行解的位置与时机与另外几种上下界网络流的不同!!!
否则,输出G[s].back().cap也就是从t到s inf边的实际流量,即为所求。

模板:LOJ 117 https://blog.csdn.net/HumveeA6/article/details/80516621

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值