本文目录#
网络流问题#
给定有向网络 G = (V, E),边容量 c(u,v)
,求源点 s 到汇点 t 的最大流量。最小割定理说明最大流量等于最小割容量。
三种算法比较#
算法 | 复杂度 | 特点 | 实战建议 |
---|---|---|---|
Edmonds-Karp | O(VE^2) | BFS 搜索增广路径,易实现 | 小规模或教学 |
Dinic | O(V^2E) (一般性能好) | 分层网络 + 阻塞流 | 工程常用,适合稀疏图 |
ISAP | O(V^2E) | 基于最短增广路的改进 | 在密集图或高容量问题表现优 |
Dinic 代码骨架#
1 | class Dinic { |
实战注意#
- 选择 long 处理大容量;
- 处理有向边反向边索引;
- 对多源/多汇场景,引入超级源/汇;
- 在 Dinic 中可添加当前弧优化(
it
数组)。
自检清单#
- 是否检测残量网络更新正确?
- 是否对重复边或多重边做合并或扩展?
- 是否评估算法复杂度与数据规模?
参考资料#
- MIT OCW 6.046 Lecture 19 (Network Flow):https://ocw.mit.edu/.../lecture-19-network-flow/
- CLRS Chapter 26 Maximum Flow
- Competitive Programming 3 网络流章节
本作品系原创,采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,转载请注明出处。