最大流Dinic算法学习

学艺不精啊


增广路

  • 基于一条这样的事实:S到T的最大流可以通过在残量网络中不断寻找增广路,直至不存在增广路,则当前流即可最大流。

最大流最小割定理

  • 最小割:将源点S和汇点T分别在两个集合。
  • 证明:一个感性的理解是,若不割掉最大流,即存在S到T的流量,故最大流=最小割
  • 增广路算法结束时,已经标号a[i]的即可即为S,其他节点即为T=V-S

Dinic算法

Dinic算法通过BFS不断构造分层图,DFS寻找增广路,实现最大流。

优化

  • 当前弧优化:每次dfs寻找增广路,是从上次考虑的弧开始增广,这样既可以保证不会重复访问已经满载的弧,也保证了算法的正确性。
  • 炸点优化:到达源点及时返回。

模板

github