网络流 (基础学习)

网络流

  1. 流网络G(V,E)是一个有向图,其中每条边( u, v )∈E 均有一非负容量 c( u, v ) ≥ 0,规定:若 u , v ∉E,则 c( u, v ) = 0。

  2. 网络中由两个特殊点: 源点S和汇点T

  3. 网络中的边相当于是粗细不同的水管,c( u, v ) 相当于是水管的直径。

  4. 流网络G的流是一个实值函数 f : V×V -> R,且满足下列三个性质:
    (1)容量限制:对于 u,vVf(u,v)c(u,v)
    (2) 反对称性:对于 u,vVf(u,v)=f(v,u)
    (3) 流守恒性:对于 u,vVs,tf(u,v)=0

  5. 最大流最小割定理:最小割的容量等于最大流
    割:割是一个边集,去掉这个边集会使得S到不了T。
    最小割:边集容量最小的割。
    残留容量:不超过容量限制下,某条边还能通过的额外的网络流量: Cf(u,v)=c(u,v)f(u,v)
    残留网络:可以理解成由可以容纳更多流的边组成的网络,起始网络也是一张残留网络。
    增广路径:一条从源点到汇点的路径,要求该路径上每条边的残留容量均大于0。这条路径上可以增加的最大流量为所有边的残留容量中的最小值。
    定理:如果 f 是具有源点S和汇点T的流网络(V,E)中的一个流,则下列条件是等价的:
    (1) f G的一个最大流
    (2) 残留网络 G 不包含增广路径
    (3) 对G的某个割,有 |f|=c(u,v)

  6. 几种求最大流最小割的算法:

    EdmondsKarp : 先在残留网络上进行BFS,找出一条增广路径,沿着增广路径进行增广,找出路径上的最大流F,即最小的残留容量。再更新残留网络,对于每条路径上的边 (u,v) f(u,v)+=F Cf(v,u)+=F 并且还有 f(v,u)=F Cf(v,u)+=F ,后两个式子保证流的守恒性,也给了系统纠正错误的机会。不断重复这两个过程,当无法找到增广路径时,最大流就找到了。

    Dinic :因为 EdmondsKarp 算法中的BFS一次只增广一条增广路,时间上很浪费,所以 Dinic 算法再前者基础上进行了改进,在BFS时。给每个节点加上一个距离标号,表示与源点S的距离,在找增广路时只需沿着距离标号递增的顺序即可。相当于DFS,多次增广。

    ISAP :ISAP在Dinic的基础上多了一个gap优化,gap[i]记录标号为i的点的个数,当网络出现断层即gap[i] == 0时,说明以及不存在增广路,也就找到了最大流。
    预留推进 (pushrelable) 算法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值