“把二分图匹配归约为单位容量流时,左点只有一条来自源的入弧,右点只有一条通往汇的出弧,得到Dinic 算法的 unit network。Hopcroft–Karp 直接在交替图上实现同一“BF…”
形式陈述 ​
给定最大流问题的容量网络。对当前可行流
距离按正残量弧数计,不可达时为
的残量记录,得到层次图。层号沿每条保留弧严格增加,所以它是 DAG。
一个阶段在层次图中发送阻塞流:更新后,每条层次图的 current[v],指向尚未证伪的第一条出记录。某条边已无残量或其后继无法送到
阻塞阶段后,残量最短路长度严格增加。BFS 性质保证旧残量图中任意弧最多让层号增加
设
空间为
直觉
Ford–Fulkerson 一次只利用一条增广路,Dinic 则先固定当前最短残量距离,再把这一距离层中的所有源汇通道一起堵住。层次图禁止同层和后退移动,DFS 因而只处理一张无环的方向骨架;阻塞完成后,下一次增广必须使用更多弧。
阻塞流不必是层次图上的最大流。它只需让每条当前最短源汇路至少有一个瓶颈饱和,以便证明距离推进;额外求层次图最大流不在这项复杂度证明的要求之内。
例子与边界
取容量
第一次 BFS 给
若 DFS 沿不满足层号递增的残量边行走,或找到一条路便立刻重做 BFS,算法仍可能保持某种增广正确性,却失去“每阶段阻断全部最短路”的证明与
阶段数与容量数值无关,因此精确实容量下也有有限组合进度,不需要容量可积。浮点实现却必须规定零残量容差,并防止极小误差让理论上饱和的边长期保留;组合复杂度按精确比较与算术理解。
推论与应用
Dinic 在二分图匹配流网络上得到 unit-network 强化界;专门的Hopcroft–Karp 算法直接在交替图上表达相同“最短增广路分阶段”思想,省去显式源汇弧。普通容量分配仍使用本页的一般界,不能因容量恰为小整数就自动声称
Push–Relabel不构造完整层次图,而维护预流、超额与局部高度,按 active vertex 放电。两者都是与容量数值无关的多项式最大流算法,但进度量分别是残量源汇距离与高度/超额势函数。
带下界与需求的可行环流要先消去下界、计算节点不平衡并加入超级源汇,再把可行性归约成最大流;负“剩余容量”不属于 Dinic 的合法输入。
参考资料
- E. A. Dinic, “Algorithm for Solution of a Problem of Maximum Flow in a Network with Power Estimation,” Soviet Mathematics Doklady 11, 1970, pp. 1277–1280。
- Shimon Even and Robert E. Tarjan, “Network Flow and Testing Graph Connectivity,” SIAM Journal on Computing 4(4), 1975, pp. 507–518。
- Ravindra K. Ahuja, Thomas L. Magnanti, and James B. Orlin, Network Flows, Prentice Hall, 1993。