算法介绍
Dinic 算法是一种用于解决网络流问题的算法,算法复杂度(上界)为 ,实际要比这个式子好得多(比如用 Dinic 算二分图时的复杂度是 )。
Dinic 算法通过对残量网络建立层次图,并在层次图上不断寻找增广路来算出最大流。
残量网络:原图及其反向边构成的图。
反向边:与原边反向的边,原图上的边的反向边的容量为 ,每一条边在残量网络上均有其反向边。
层次图:只保留相邻层次之间的边,且不考虑已达到满流的边的图。
层次:可以视作到源点的距离分类。
增广路:残量网络上一条从源点到汇点的边,其所有边中的最小容量为其增广容量。
当前边优化:建立层次图以后,若某个点有一条边已经增广过了,则这条边在当前层次图之后的增广中不会再用到。