网络流乱记

不会咕!算法

基本概念

下面是一些概念,理解便可,不需强记。网络

网络流图

一个网络流图是一个没有自环的有向连通图,知足:spa

  • 只有一个入度为 \(0\) 的点 \(S\),称为源点;
  • 只有一个出度为 \(0\) 的点 \(T\),称为汇点;
  • 每条边 \((i,j)\) 有一个非负实数权值 \(c_{i,j}\),称为该边的容量

允许流

允许流,又叫可行流.blog

在网络流图中,对于每条边 \(e=(i,j)\) 给定实数 \(f_e\), 若是知足:it

  • 每一条边的容量 \(f_e\le c_e\)class

  • 流量平衡:对于任意 \(x\ne S, T\)\(\sum\limits_{e=(x,i)}f_e=\sum\limits_{e=(i,x)}f_e\)方法

  • 对于源点 \(S\) 和汇点 \(T\) 有:\(\sum\limits_{e=(S,i)}f_e=\sum\limits_{e=(i,T)}f_e=W\)im

    即源点流进去多少,汇点就会流出多少,不会有流量的损失.img

则称这一组 \(f\) 为该网络的一个允许流,\(W\)称为他的流量。di

最大流

一个容量 \(W\) 最大的允许流 。

可增广路

可增广路,又叫可改进路.

介绍这个概念以前,先看看几个别的概念:

给定一个允许流 \(f\)

  • 若对于一条边 \((i,j)\)\(f_{i,j}=c_{i,j}\),则称 \((i,j)\)饱和弧,不然称非饱和弧
  • 若对于一条边 \((i,j)\)\(f_{i,j}=0\),则称 \((i,j)\)零流弧,不然称非零流弧
  • 定义一条道路 \(P\),起点是 \(S\),终点是 \(T\)。把 \(P\) 上全部与 \(P\) 方向一致的弧称为正向弧 ,正向弧的全体记为 \(P^+\);把 \(P\) 上全部与 \(P\) 方向相悖的弧称为反向弧,反向弧的全体记为 \(P^-\)

给定一个允许流 \(f\)\(P\) 是从 \(S\)\(T\) 的一条道路,若是知足:

  • \(f_{i,j}\) 是非饱和弧,且 \((i,j)\in P^+\)
  • \(f_{i,j}\) 是非零流弧,且 \((i,j)\in P^-\)

那么就称 \(P\)\(f\) 的一条可增广路,之因此称为”可增广路“,是由于可改进路上弧的流量经过必定的规则修改,能够使整个流量放大。

最大流算法

基本思路:不断尝试寻找增流路径,增长允许流的流量,直到没法增长为止,此过程称为增广过程

Ford-Fulkerson 标号方法

简介

\(\text{Ford-Fulkerson}\),一种迭代算法,先对图中全部顶点对的流清零(此时网络流大小也为 \(0\))。在每次迭代中,经过寻找一条增广路径来增长流的值,一直迭代到没法再找到增广路径为止。

概念:残留网路

剩余的容量+反向平衡的流量共同构成了残留网络。

EK算法

SAP算法

Dinic算法

最小费用最大流

题……

写在最后

感谢 ACM大神 dengsiyu 和 XLightGod 大神的讲课!

参考资料:

相关文章
相关标签/搜索