【网络流】之有上下限的网络流

【网络流】之有上下限的网络流

发表于       starfall

有上下限的网络流其实很简单。只要掌握建图方法就可以了。

 

我碰到过的有上下限的网络流题目只分三种情况:

1、是否存在可行流;2、求最小可行流;3、求最大可行流。

还有一种变形:当存在可行流时,问每条边的流量分别是多少。

流传的论文:《一种简易的方法求解流量有上下界的网络中网络流问题》(周源)。

如果概念(可行流/最小可行流/最大可行流等)不清楚的话,还是应该好好看一下的。这篇论文用的是二分法求解,其实比较麻烦。但至少二分法做为什么是对的额,证明很清楚。

 

 

分享一下不用二分法求最小/最大可行流的方法

PS:这个是前辈流传下来的,不知道出处是什么地方,也不知道为什么这么做是对的……

感谢 jifengxiang & starvae

 

    • 求有上下界的最小可行流:

 

定义边(u,v,b,c),即从点u到点v的边,流量下限是b,上限是c。

原来的边(u,v,b,c)建边u->v,容量为c-b。

in[v]代表以v为终点的流量下界和,out[u]代表以u为起点的流量下界和。

创造虚拟源点SS,汇点TT。

建边SS->i,容量为in[i]。建边i->TT,容量为out[i]。

跑一次最大流maxflow(SS,TT),加边(T,S,inf) (S,T为原始网络的源点和汇点)

再泡一次最大流maxflow(SS,TT).

检查SS的出边,如果有没有满流的,则不存在可行流,即无解。

否则最小可行流=inf-残余网络中(T,S)。

 

 

    • 求有上下限的最大可行流

 

定义边(u,v,b,c),即从点u到点v的边,流量下限是b,上限是c。

原来的边(u,v,b,c)建边u->v,容量为c-b。

in[v]代表以v为终点的流量下界和,out[u]代表以u为起点的流量下界和。

创造虚拟源点SS,汇点TT。

建边SS->i,容量为in[i]。建边i->TT,容量为out[i]。

//以上步骤跟最小可行流一样。

对原始源点汇点连边(T,S,inf)

泡一次最大流maxflow(SS,TT)

检查SS的出边,如果有一条出边没有满流,则不存在可行流,即无解。

否则最大可行流 = maxflow(S,T) (S,T为原始网络源点与汇点)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值