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

2021-08-28 06:45:14 字數 1324 閱讀 9670

題目鏈結

mcmf(最小費用最大流):由於要使用反向邊。定義乙個h[i]:表示從匯點到i的最短距離。對於一條邊e(v,u),e.cost = e.cost + h[v] - h[u],這樣可以保證圖中沒有負權邊的存在,這樣就可以使用dij來求最短路。

每次求一條最短路,然後通過這條最短路更新最大流,直到找不出最短路為止。

#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

#define pi acos(-1)

#define inf 0x3f3f3f3f

#define num 50010

#define debug true

#define lowbit(x) ((-x)&x)

#define ffor(i,d,u) for(int i=d;i<=u;++i)

#define _ffor(i,u,d) for(int i=u;i>=d;--i)

#define mst(array,num) memset(array,num,sizeof(array))

const int p = 1e9+7;

int n,m,ednum;

int head[num/10],h[num/10]={};

int pre[num/10],dist[num/10];

struct edge

e[num<<1];

struct vertex

};template inline void read(t &x)

template inline void write(t x)

while(x/=10);

_ffor(i,len,1)putchar(c[i]);

}inline bool dij(const int &s,const int &t)}}

if(dist[t] == inf)return false;

return true;

}inline void mincost_maxflow(const int &s,const int &t,int &cost,int &maxflow)

}}inline void ac()

cost = 0;

mincost_maxflow(s,t,cost,maxflow);

write(maxflow),putchar(' '),write(cost),puts("");

}int main()

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

乙個網路圖雖然最大流確定,但達到最大流的方案並不唯一。如果對於每條邊,都加乙個費用f,表示這條邊流過單位流量的代價,求達到最大流時的最小費用,這就是最小費用最大流問題。解決方法 ek費用流或zwk費用流。這裡只講ek費用流。採用貪心的思想。我們每次增廣時都選擇費用最小的一條。這樣,因為最大流是確定的...

洛谷 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出發,到...