算法学习——上下界网络流

顾名思义,带上下限网络流即对于网络流中的每一条边,都带有流量的上界和下界。

普通的网络流可以看做下界为0的上下限网络流。

 

1,无源汇带上下界可行流。

定义一个数组d[x]表示图中点x的入度下限和-出度下限和。

建图方式为:
  对于图中每一条边,都连流量为上界-下界的边,并在加边的时候统计d[x]。

  对于任意一个点,如果它的d[x] > 0,那么连s --- > x, 流量为d[x];

  如果它的d[x] < 0, 那么连x --- > t, 流浪为-d[x]。

  然后直接从s到t跑网络流即可,如果满流即为合法,否则不合法。

  如何理解?

  因为下界是必须达到的,因此先把所有的边都强行达到下界。

  对于任意一个点,如果d[x] > 0, 那么表示进来的流量有剩余,还没有流完,因此从s给它补充d[x]的流量。

  反之,如果d[x] < 0, 那么表示进来的流量不够,所以连向t以让它可以接收流量来补足不够的-d[x]的流量。

  如果满流,那么代表剩余的流量可以恰好补全不够的流量,那么就是可行了。

  同时因为每条边都变为了上界-下界,因此不管怎么流,都是不会超过上界的,于是就成功的把流量限制在了[下界,上界].

2,有源汇带上下界可行流。

  建图方式与上述相同,只是把原来的源汇连一条t --- > s : inf的边(现在的超级源汇为ss, tt)

3,有源汇带上下界最大流。

  先做一遍可行流,然后去掉ss和tt,在残余网络上跑最大流,最大流即为答案。

  因为有反向边,所以之前可行流流出的流量会从反向边流到t,于是基础流量就会被满足了,然后就是在这个基础上增添流量。

  又因为是最大流,所以跑出来的肯定是最优解。

4,有源汇带上下界费用流

  建图方式和网络流差不多,原图上的边费用不变,新增的边费用为0.一开始减掉下界的时候要加上流下界的费用。

  最后和跑出的费用相加,得到最后的费用。

  

转载于:https://www.cnblogs.com/ww3113306/p/9688842.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值