洛谷 P3381 模板 最小費用最大流

2021-08-17 02:45:41 字數 1109 閱讀 9680

乙個網路圖雖然最大流確定,但達到最大流的方案並不唯一。如果對於每條邊,都加乙個費用f,表示這條邊流過單位流量的代價,求達到最大流時的最小費用,這就是最小費用最大流問題。

解決方法:ek費用流或zwk費用流。這裡只講ek費用流。

採用貪心的思想。我們每次增廣時都選擇費用最小的一條。這樣,因為最大流是確定的,因此最後結束時得到的一定是最大流;因為採用貪心的方法,所以費用一定最小。

具體操作:建圖時反向邊的費用為-f,因為撤銷流量時要減小費用。每次增廣時,先以每條邊的單位流量代價為邊權跑一遍spfa(不走剩餘流量0的邊)。如果能到達匯點,就在最短路進行增廣(所有邊減去瓶頸邊剩餘流量,反向邊加上瓶頸邊剩餘流量,更新最大流和總費用),重複上述過程;如果不能到達,說明已達到最大流,演算法結束。

#include 

#include

#include

#include

using

namespace

std;

const

int maxn=5010;

const

int maxm=50010;

const

int inf=0x3f3f3f3f;

int n,m,s,t,maxflow,mincost;

int head[maxn],ecnt;

struct edgeg[maxm*2];

inline

void adde(int u,int v,int w,int f);

head[u]=ecnt++;

g[ecnt]=(edge);

head[v]=ecnt++;

}int dis[maxn],pre[maxn],minw[maxn];

bool vis[maxn];

queue

q;bool spfa()}}

return dis[t]!=inf;

}void update()

void solve()

int main()

solve();

printf("%d %d\n",maxflow,mincost);

return

0;}

洛谷 P3381 模板 最小費用最大流

題目鏈結 mcmf 最小費用最大流 由於要使用反向邊。定義乙個h i 表示從匯點到i的最短距離。對於一條邊e v,u e.cost e.cost h v h u 這樣可以保證圖中沒有負權邊的存在,這樣就可以使用dij來求最短路。每次求一條最短路,然後通過這條最短路更新最大流,直到找不出最短路為止。i...

洛谷 P3381 模板 最小費用最大流

洛谷 p3381 模板 最小費用最大流 include include include include include include include include include define maxe 50005 define maxn 5005 define inf 0x3f3f3f3f t...

洛谷P3381 模板 最小費用最大流

如題,給出乙個網路圖,以及其源點和匯點,每條邊已知其最大流量和單位流量費用,求出其網路最大流和在最大流情況下的最小費用。輸入格式 第一行包含四個正整數n m s t,分別表示點的個數 有向邊的個數 源點序號 匯點序號。接下來m行每行包含四個正整數ui vi wi fi,表示第i條有向邊從ui出發,到...