洛谷P3381 MCMF 網路流

2022-05-18 06:23:18 字數 1594 閱讀 6053

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

第一行包含四個正整數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。

結合題目理解板子很高效,建圖很明顯的一道題和感謝幫助我很多的oi爺給的這個板子

#include #include 

#include

#include

#include

using

namespace

std;

const

int maxn = 1e5 + 7

;bool

vis[maxn];

intn,m,s,t,u,v,w,c;

intcost[maxn],pre[maxn],last[maxn],flow[maxn];

intmaxflow,mincost;

template

inline void read(t &res)

struct

edgee[maxn

<< 1

];int

head[maxn],cnt;

queue

q;void

init()

inline

void buildgraph(int u,int to,int flow,int

cost)

bool spfa(int s,int

t) }}}

return pre[t]!=-1;}

void

mcmf()

}}int

main()

mcmf();

printf(

"%d %d

",maxflow,mincost);

return0;

}

洛谷P3381 Dijkstra版費用流

鑑於spfa很容易被卡,所以學了一手dij跑費用流 具體參考 雖然有個小地方少了個負號,不過還好 區別就是把 u v 邊權變成cost h u h v 先用spfa算出dis當h i 然後每次跑完mcf,由於負權邊的容量可能增加能選了,就要h i dis i 這樣動態維護,就能保證每條邊都是正的 i...

網路流 模板 洛谷P1343

題目 題目描述 汶川 發生時,四川 中學正在上課,一看 發生,老師們立刻帶領x名學生逃跑,整個學校可以抽象地看成乙個有向圖,圖中有n個點,m條邊。1號點為教室,n號點為安全地帶,每條邊都只能容納一定量的學生,超過樓就要倒塌,由於人數太多,校長決定讓同學們分成幾批逃生,只有第一批學生全部逃生完畢後,第...

網路流 最小割 洛谷P1345

很不幸,有時候奶牛會不小心踩到電腦上,農夫約翰的車也可能碾過電腦,這台倒霉的電腦就會壞掉。這意味著這台電腦不能再傳送電郵了,於是與這台電腦相關的連線也就不可用了。有兩頭奶牛就想 如果我們兩個不能互發電郵,至少需要壞掉多少臺電腦呢?請編寫乙個程式為她們計算這個最小值。以如下網路為例 1 3 2 這張圖...