网络流-费用流(dijkstra写法)
模板提 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<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<string> #include<fstream> #include<vector> #include<stack>