网络流理论 (Network Flow Theory)
网络流不仅是组合优化的核心,更是线性规划 (Linear Programming) 在图结构上的投影。本章将从形式化对偶性出发,系统性地构建流网络的性质证明、收敛性分析及其在单位网络中的复杂度界限。
定义 (Feasible Flow):函数 f:V×V→R 满足:
- 容量限制:f(u,v)≤c(u,v)。
- 斜对称性:f(u,v)=−f(v,u)。
- 流量守恒 (Flow Conservation):除 s,t 外,对于任意 u∈V∖{s,t},满足 ∑v∈Vf(u,v)=0。
流量守恒一致性证明 (Consistency Proof) 命题:在增广路算法(如 FF 或 Dinic)中,对路径 p 进行增广操作后,流量守恒性依然保持。
证明:
- 设增广流量为 Δ。对于路径上的中间点 v∈p,v 必有入边 (u,v) 和出边 (v,w)。
- 增广操作令 f(u,v)←f(u,v)+Δ,f(v,w)←f(v,w)+Δ。
- 对于点 v,入流净增 Δ,出流净增 Δ,其净流量 ∑x∈Vf(v,x) 保持不变(原先为 0,增广后仍为 0)。
- 对于 s 和 t,分别仅有出流或入流发生变化,符合流定义。
引理 (Flow-Cut Duality):穿过任意割 (S,T) 的净流量等于流的价值 ∣f∣。
Proof: f(S,T)=∑u∈S∑v∈Tf(u,v)=∑u∈S(∑v∈Vf(u,v)−∑v∈Sf(u,v))=∑u∈S∑v∈Vf(u,v)
由于斜对称性,∑u∈S∑v∈Sf(u,v)=0。且根据守恒性,只有 u=s 时 ∑f(s,v) 非零,故 f(S,T)=∣f∣。
Dinic 的高效性建立在分层图 (Level Graph) 的严格单调性上。
引理:在 Dinic 的一轮迭代(BFS + 多路 DFS 增广)后,下一轮 BFS 得到的 dist(s,t) 严格增加。
证明要点:
- 在残量网络 Gf 中,只有当 (u,v) 满足 dist(u)+1=dist(v) 时才可能被增广。
- 增广后,原有层间的饱和边消失,而可能产生反向边 (v,u)。
- 反向边 (v,u) 满足 dist(v)=dist(u)+1,即它是指向前一层的,不会缩短 s→t 的最短距离。
- 只有当 s→t 在当前分层图中所有路径都饱和时,才需要重新 BFS 增加层数。
结论:由于 dist(s,t)≤n,算法最多进行 n 轮 BFS,总复杂度 O(V2E)。
定理 2.1:最大流价值 ∣f∣ 等于最小割容量 c(S,T)。
证明要点:
- 任意流 ≤ 任意割。
- 当残量网络 Gf 无增广路时,定义 S 为 s 可达点集,通过构造性证明 ∣f∣=c(S,T),从而建立等价性。
对于边 (u,v) 有下界 luv 和上界 cuv:
建立新源汇 S′,T′。
- 流量平衡:对于点 u,设 in_sum 为进入 u 的所有下界之和,out_sum 为离开 u 的下界之和。
- 连边:
- 若 in_sum−out_sum>0,连边 (S′,u),容量为 in_sum−out_sum。
- 若 in_sum−out_sum<0,连边 (u,T′),容量为 out_sum−in_sum。
- 结论:若 S′→T′ 满流,则存在可行流。
给定一个 DAG,用最少的互不相交的路径覆盖所有顶点。
Check Solution
解析:
- 拆点:将每个点 u 拆为 uin 和 uout。
- 建模:
- 对于原图中的边 (u,v),连边 (uout,vin),容量 1。
- S→uout,uin→T,容量均位 1。
- 计算:最小路径数 = 总顶点数 - 最大匹配数。
给定带权图,选择一些点,若选择了点 u,则必须选择其所有后继点。求总权值最大。
Check Solution
解析:
- 建模:
- S→正权点,容量为点权。
- 负权点→T,容量为点权的绝对值。
- 原图中的边 (u,v),连边 (u,v),容量 ∞。
- 计算:∑PositiveWeights−MinCut。
给定一个部分边有向、部分边无向的图,判定是否存在欧拉回路。
Check Solution
解析:
- 预处理:给无向边任意定向,并计算每个点的度数差 D=in-degree−out-degree。若有奇数度数点,必无解。
- 建模:
- 目标是将某些无向边重定向,使所有点 D=0。
- 连边 (S,u)(若 D>0)或 (u,T)(若 D<0),容量为 ∣D∣/2。
- 对于原无向边定向 (u,v),连边 (u,v),容量 1(表示可以反向)。
- 判定:若最大流为满流,则存在欧拉回路。
找两条从起点到终点的点不相交路径,使得路径权值和最大。
Check Solution
解析:
- 拆点:每个点 u 拆为 uin,uout,连边 (uin,uout),容量 1(起点终点为 2),权值为 1。
- 连边:原边 (u,v) 连边 (uout,vin),容量 1,权值 0。
- 求解:最大费用最大流。