最小费用最大流
在通过使用增广路径求解网络的最大流的基础之上,结合Dijkstra最短路径算法,求解给定路径代价的最小费用最大流。
1. 原理
设网络 D = ( V , A , C ) D=(V,A,C) D=(V,A,C),每一个弧 ( v i , v j ) ∈ A (v_i,v_j)\in A (vi,vj)∈A,弧的容量 c i ∈ C c_i\in C ci∈C,以及每个弧上单位流量的费用 b ( v i , v j ) ≥ 0 b(v_i,v_j) \geq 0 b(vi,vj)≥0。最终的目标是求得该网络中的一个最大流 f f f,使得 b ( f ) = ∑ ( v i , v j ) ∈ A b i j f i j b(f)=\sum\limits_{(v_i,v_j)\in A} b_{ij} f_{ij} b(f)=(vi,vj)∈A∑bijfij 最小。
若 f f f是所有可行流中费用最小的,则按照费用最小的增广路径调整网络中的流,最终得到的就是所有可行流中的最小费用流。由于 f = 0 f=0 f=0是最小费用的流,所以从 f = 0 f=0 f=0开始。
根据网络中的流,构造带权有向图 W ( f ) W(f) W(f),其中每个弧的权重 ω i j \omega_{ij} ωij定义为:
ω i j = { b i j , f i j < c i j + ∞ , f i j = c i j