裸题意:
一个网络,每条边有容量,也有单位流量的费用。
此时最大流可能有多种,求费用最小的最大流费用。
下面给出一种常用的方法:
- 以费用为长度,用SPFA沿还有流量的弧找出一条从源点到汇点的最短路,并记录路径和这条路上剩余流量最少的边的流量$f_{min}$(若源汇点之间不连通就表示没有增广路了,当前费用就是最大流的最小费用)。
- 增广这条最短路,这条路的每条边流量加$f{min}$,这的次增广的费用就是$f{min}*d$($d$是最短路长度)。然后继续步骤$1$。
大致证明:
用费用最短路找的增广路一定是当前同流量中费用最小的一条增广路。
假设此时最短路长度为$d$,这条增广路流量为$f$,这条增广路费用就是$df$,若有其他增广路要流过$f$流量,费用一定会大于$df$。
或者说:用最短路找出来的增广路增广的成本肯定是是最低的。
因为每一次增广后的图都是当前用最小费用增广出来的,所以最后以这种贪心思想找出来的最大流一定是最小费用的。
其他
曾经有大神说过:“当一某道题的正解是用网络流,那这时网络流的时间复杂度就是$O(10^7)$,若不是网络流,那它的时间复杂度就是$O(10^9)$。”
一些费用流题目: