浅谈网络流

网络流是 OI 中一种非常重要的模型,在生活中也有广泛的运用。
有很多问题都可以抽象成网络流模型,而且这些题大多数看起来甚至跟 都没有关联。
所以,掌握好网络流是 至关重要 的。

0x01. 概念 1

下述概念较多,比较抽象。

网络

请注意 网络(Flow Network)和 网络流(Flow)的区别。

网络是一个有向带权图 G ( V , E ) G(V, E) G(V,E),一条边 ( u , v ) ∈ E (u, v) \in E (u,v)E 的边权 c ( u , v ) c(u, v) c(u,v) 称为这条边的 容量(Capacity)。
网络中有两个特殊点,源点(Source) s ∈ V s \in V sV,汇点(Sink) t ∈ V t \in V tV

网络流即网络上的流。
对于函数 f ( u , v ) f(u, v) f(u,v) u , v ∈ V u, v \in V u,vV,若其满足

  1. 容量约束。任意一条边 ( u , v ) (u, v) (u,v) 的流量不能超过它的容量 c ( u , v ) c(u, v) c(u,v),即 f ( u , v ) ≤ c ( u , v ) f(u, v) \le c(u, v) f(u,v)c(u,v)
  2. 反对称性。每条边的流量与其相反边的流量之和为 0 0 0,即 f ( u , v ) = − f ( v , u ) f(u, v) = -f(v, u) f(u,v)=f(v,u)
  3. 流量守恒。除 s s s t t t,所有节点的流入量等于流出量,即 ∀ x ∈ V − { s , t } , ∑ ( u , x ) ∈ E f ( u , x ) = ∑ ( x , v ) ∈ E f ( x , v ) \forall x \in V - \{s, t\}, \sum\limits_{(u, x) \in E}f(u, x) = \sum\limits_{(x, v) \in E}f(x, v) xV{s,t},(u,x)Ef(u,x)=(x,v)Ef(x,v)

则称 f f f G G G流函数。对于 ( u , v ) ∈ E (u, v) \in E (u,v)E f ( u , v ) f(u, v) f(u,v) 称为边的 流量 c ( u , v ) − f ( u , v ) c(u, v) - f(u, v) c(u,v)f(u,v) 称为边 ( u , v ) (u, v) (u,v)剩余流量,整个网络的流量为 ∑ ( s , v ) ∈ E f ( s , v ) \sum\limits_{(s, v) \in E} f(s, v) (s,v)Ef(s,v),即 从源点出发到所有点的流量之和
一般而言也可以把网络流理解为整个图的流量。而这个流量必满足上述三个性质。
流函数的完整定义:
f ( u , v ) = { f ( u , v ) , ( u , v ) ∈ E − f ( v , u ) , ( v , u ) ∈ E 0 , ( u , v ) ∉ E f(u, v) = \begin{cases} f(u, v), & (u, v) \in E \\ -f(v, u), & (v, u) \in E \\ 0, & (u, v) \not\in E \end{cases} f(u,v)= f(u,v),f(v,u),0,(u,v)E(v,u)E(u,v)E

0x02. 形式化网络

本节仅帮助理解上述概念,已理解可直接跳过。

好吧上面的概念太抽象了(但是基本定义还是要了解。
其实可以把网络想象成一个大型输水系统,有许多的点和许多水管连接着这些点。
源点 s s s 是水库,可以输出任意大小的水流,汇点 t t t 是汇聚所有水流的地方。
水流从 s s s 流到 t t t 需要经过中转点,中转点不产生流量,也不私吞流量。
水管有一定的容量,不能超额运输水流。
如果从 s s s 输出一定大小的水流,能满足上述的限制,最终流入 t t t,那么这条流就被称为整个网络的一条 可行流

上图是一个为了帮助你理解的网络,源点是 1 1 1,汇点是 4 4 4,边上的数字代表该边的容量。

0x03. 最大流

网络最大流 指在满足容量约束和流量守恒的前提下,净输出最大的网络流。
最大流算法根据实现原理可以分为两类。

Ford-Fulkerson 增广路算法

这类方法通过寻找 增广路 来求解最大流。

Push-Relabel 预流推进算法

这类方法在求解过程中忽略流守恒性,并每次对一个结点更新信息,以求解最大流。


  1. 参考资料:网络流简介 - OI Wiki ↩︎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值