网络流 (网络流问题汇总)

基本概念:

网络:(1)有一个源点 s 和汇点 t 。

           (2)每一条有向边e=(u,v)都有一个容量限制记做c(e)。

:定义在网络弧集上的实值函数 f ,满足三个性质

           (1)对任意的弧 0 <= f <= c(e),容量限制。

           (2)f(u,v) == -f(v,u),反对称性。

           (3)流守恒性:除源汇点外,其余顶点都是过度点,流进顶点的流总和等于流出顶点的流总和。

残余网络:用e表示网络中的边,e' 表示残余网络中的边,残余网络中的边由以下两种构成:

           (1)若f(e) < c(e) ,e=(u,v),则e' =(u,v)容量为 c(e) - f(e)

           (2)若f(e)>0,e=(u,v),则加入边 e'=(v,u),容量为 f(e)

             其中有(1)生成的边表示沿着这条边还能推进多少流;由(2)生成的边表示沿着该边的逆方向能退回多少流。

增广路: 定义增广路 P 是在残余网络上的一条从源点 s 到汇点 t 的简单路径,路径的残余流量为该边上的边 e' 容量的最小值,其实就是残余网络上增广的流值大于 0 的一条路径。

 

割的定义:设网络G,如果 X 是 V 的顶点子集,Y 是 X 的补集,即 Y = V - X,且满足 源点 属于X,汇点 属于 Y。则称K=(X,Y)为网络 G 的割,K的容量记为 cap(K) 最小割就是该网络中流量最小的割。

最小割最大流定理

指在一个网络流中,能够从源点到达汇点的最大流量  等于  如果从网络中移除就能够导致网络流中断的边的集合的最小容量和。即在任何网络中,最大流的值等于最小割的容量

完整描述:下面给出的三个定理是等价的

(1)f 是 G 的最大流 (2)残余网络不包含增广路径  (3)对于图的某个割K=(X,Y),最大流=cap(K)

最大流问题: 在不超过个边容量限制的情况下,求源点到汇点的最大流量

Ford-Fulkson算法思想:

(1)初始化网络中所有边的容量,c(u,v)表示边的容量,c(v , u)=0 边(v,u)为回退边

(2)在残量网络中找一条从源点到汇点的增广路P,找到进行(3)否则进行(5)

(3)在增广路中找到路径中容量最小的边 X,累加到最大流中。

(4)将增广路中所有的c(u,v)减去 X ,所有的c(v,u)加上X,构成新的残余网络,转步骤(2)

(5)得到最大流,退出

《算法导论》中将Ford-Fulkson归结为一种方法而非算法,也许正是因为(2)中为给出寻找增广路的具体方法。

而能否高效的寻找到增广路是判断各算法优劣的主要依据。

根据刘汝佳大大在书中的建议:理解Ford-Fulkson算法的原理,比赛中使用Dinic或者ISAP(当做黑盒算法)

dinic模板链接:模板

最大费用最小流:每条边除了有一个容量限制外,还有所需要的费用。而要达到的是总流量最大的前提下,总费用最小的流。

MCMF模板链接:模板 

转载于:https://www.cnblogs.com/zhizhaozhuo/p/9594205.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值