网络流补漏
最小割模型
最大权值闭合图,即给定一张有向图,每个点都有一个权值(可以为负),你需要选择一个权值和最大的子图,使得子图中每个点的后继都在子图中。
- 对于一个正权点,连边 \((s,u,val_u)\)。
- 对于一个负权点,连边 \((u,t,-val_u)\)。
答案为所有正权点权值和-最大流。
Johnson 全源最短路径算法
考虑对有负权的边跑全源最短路。考虑更改边权使边权都为正数,且答案不变。
先建一个 0 节点,连向所有点边权为 0,跑 spfa 得到每个点的 h_i 距离 0 的最短路,把边权改成 \(w_i\leftarrow h_u+w_i-h_v\),然后对 \(s\) 为起点跑单元最短路,实际上 \(s\) 到 \(t\) 的最短距离就是 \(dis_t-h_s+h_t\)。
- 考虑路径 \(v_1,\ldots,v_m\),路径距离为 \(h_{v_1}+w_1-h_{v_2}+h_{v_2}+\ldots\),得到 \(h_{v_1}-h_{v_m}+\sum w_i\)。
- 因为最开始跑的最短路所以 \(h_v\le h_u+w_i\),所以 \(h_u+w_i-h_v\ge 0\)。
Primal-Dual 原始对偶算法
跑费用流瓶颈在于每次求最短路。可以利用 Johnson 全源最短路算法,但是每次可能会新加入一些反向边。
考虑对已经被修正的边权跑完一遍流,求出 \(h_i\) 为点 \(s\) 到点 \(i\) 的最短路(此处为被修正的边权)。再把所有边权 \(u\to v\) 改为 \(h_u+w_i-h_v\)。合法证明:
- 对于原有的边肯定合法,上面有说明。
- 只有被增广的边才可能出现反向边,发现 \(h_u+w_i=h_v\),即 \(h_u+w_i-h_v=0\),那么正/反边权都为 0 了。
复杂度 \(O(nm+fm\log m)\)。
有负环的费用流
对于所有负边直接让它跑满流,然后建出反向边,跑满流相当于给定一个下界,直接跑上下界费用流即可。负权边都满流了那肯定没负环了。

浙公网安备 33010602011771号