如題,給出乙個網路圖,以及其源點和匯點,每條邊已知其最大流量和單位流量費用,求出其網路最大流和在最大流情況下的最小費用。
第一行包含四個正整數n、m、s、t,分別表示點的個數、有向邊的個數、源點序號、匯點序號。
接下來m行每行包含四個正整數ui、vi、wi、fi,表示第i條有向邊從ui出發,到達vi,邊權為wi(即該邊最大流量為wi),單位流量的費用為fi。
一行,包含兩個整數,依次為最大流量和在最大流量情況下的最小費用。
輸入 #1
4 5 4 34 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 這張圖...