模板提
P3381 【模板】最小费用最大流
个人简述
首先呢,dijkstra算法求费用流是不如spfa求费用流的,因为这个题目不开O2优化,就过不去....
那么我们为什么要用这个算法呢?个人认为确实没什么用....还是用spfa或者zkw求费用流吧
总所周知,dijkstra是不能跑有负环的图的,而我们在求最小费用流的过程中一般会存在负环(反边的存在),因此我通过引入势的概念,将图的边用 e' 代替,其中 e' = e + h[u] - h[v] ,h[i]代表i点的势,这样的话,将新的图中的s-t路径的长度减去常数h[s] - h[t] ,得到的即为原图中对应路径的长度,因此新图和原图中的最短路是一致的。
因为dijkstra只实用于无负环的图,所以我们需要选取合适的势,将使得新图的每一条边的费用 cost[e] >= 0,我们就可以用dijkstra算法求最小费用流了。
代码区
#pragma GCC optimize(2) //O2优化,不开过不去...
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include