LOJ 116 有源汇有上下界最大流(模板)

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

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

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
struct edge{
    int to,cap,rev;
    bool tag;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值