一些名词
图 G(V,E) 边集为 V,点集为 E。
tmp(temporary) 暂时
弧 有向边
c(u,v) 容量 (cap)
f(u,v) 流量 (flow)
r(u,v) 残余流量 (rest)
最大流问题
1、Ford Fulkerson method
1-1 残留网络
r(u,v)=c(u,v)-f(u,v)=f(v,u)1-2 增广路径
一条 s->t 的路径使得 r(u,v)>01-3 求最大流
建上反向边,使得流出去的流得以“反悔”。(精髓)
当残留网络Gf中不包含增广路径时,f 就是是G的最大流。
一直找增广路径,找不到就退出算法,那么当前流即是最大流1-4 找增广路方法
- EK (EdmondsKarp)
直接 bfs 找最短的增广路径,修改流量值,当没有增广路时算法停止。 - Dinic (模板链接)
EK 的优化,在分层的基础上 dfs。
允许弧 u->v:rest[u,v]>0,dis[v]=dis[u]+1。
每次求一次 dis[] (点在残量网络中到 S 的最短路),然后在允许弧网络中处理出若干条增广路径。 - ISAP (Improved Shortest Augmenting Path)
施工中
- EK (EdmondsKarp)
1-5 相关证明
施工中……- 1-6 推荐文章
2、Preflow-push method
割
割:流网络 G(V,E) 的割 (S,T) 将 V 划分为分别包含 s 与 t 的两个集合,从集合S到集合T的所有弧的集合
割容量:割中弧的容量和
最大流不能超过最小割