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

2022-04-04 21:59:59 字數 1636 閱讀 9287

如題,給出乙個網路圖,以及其源點和匯點,每條邊已知其最大流量和單位流量費用,求出其網路最大流和在最大流情況下的最小費用。

輸入格式:

第一行包含四個正整數n、m、s、t,分別表示點的個數、有向邊的個數、源點序號、匯點序號。

接下來m行每行包含四個正整數ui、vi、wi、fi,表示第i條有向邊從ui出發,到達vi,邊權為wi(即該邊最大流量為wi),單位流量的費用為fi。

輸出格式:

一行,包含兩個整數,依次為最大流量和在最大流量情況下的最小費用。

輸入樣例#1:

4 5 4 3

4 2 30 2

4 3 20 3

2 3 20 1

2 1 30 9

1 3 40 5

輸出樣例#1:

50 280
時空限制:1000ms,128m

(byx:最後兩個點改成了1200ms)

資料規模:

對於30%的資料:n<=10,m<=10

對於70%的資料:n<=1000,m<=1000

對於100%的資料:n<=5000,m<=50000

樣例說明:

如圖,最優方案如下:

第一條流為4-->3,流量為20,費用為3*20=60。

第二條流為4-->2-->3,流量為20,費用為(2+1)*20=60。

第三條流為4-->2-->1-->3,流量為10,費用為(2+9+5)*10=160。

故最大流量為50,在此狀況下最小費用為60+60+160=280。

故輸出50 280。

屠龍寶刀點選就送

#include #include 

#define max 50005

#define inf 0x7fffffff

void read(int &x)

struct

edge

edge[max

<<1

];bool

vis[max];

int flow[max],answer,cost,fa[max],head[max],cnt=1

,n,m,s,t,dis[max];

int min(int a,int b)

void insert(int u,int v,int w,int

l)bool spfa(int s,int

t) vis[s]=1

; dis[s]=0

; fa[s]=0

;

int que[max],l=0,r=0

; que[++r]=s;

while(l}}

}return dis[t]

}void dinic(int s,int

t) answer+=x;cost+=x*dis[t];

}}int

main()

dinic(s,t);

printf(

"%d %d\n

",answer,cost);

return0;

}

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

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

洛谷 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...