今天終於講了久仰其大名的網路流。
網路流是乙個有向圖.
容量:每條邊都有乙個容量(水管的最大水流容量)
源點:出發點(水廠)。
匯點:結束點(廢水站)。
流:乙個合法解稱作乙個流,也就是一條可以從源點到匯點的一條合法路徑。
流量:每條邊各自被經過的次數稱作其流量,最終收集的總數為整個流的流量。
三個性質:
1.容量限制:流量小於等於容量,即f(u,v)<=c(u,v)
2.流量守恆:除了源點和匯點,每個點的總流入量等於總流出量【即無法儲存量】
3.斜對稱性:f(u,v)= - f(u,v)
最大流:從源點能最多發出多少流量到匯點且不會超過每條邊的容量
三種網路:
1.容量網路:就是容量組成的網路。
2.流量網路:實際流量組成的網路。
3.殘留網路:每條邊的容量減去流量得出的網路,如果是0,則視為斷開。
另外,殘量網路中還包含原圖中所有邊的反向邊,容量等同於正向邊在流量網路中當前流量,用於「反悔」時將流送回起點。
割乙個對於點集v的劃分,將v劃分為兩個集合s與t,其中源點s在s中,匯點 t在t中。
對於乙個流f而言:
割(s,t)間的網路流量定義為:∑u⊆
s∑v⊆
t\sum_\sum_
∑u⊆s∑
v⊆t
f (u
,v
)f(u,v)
f(u,v)
-∑ u⊆
s∑v⊆
t\sum_\sum_
∑u⊆s∑
v⊆t
f (v
,u
)f(v,u)
f(v,u)
割(s,t)的容量定義為∑u⊆
s∑v⊆
t\sum_\sum_
∑u⊆s∑
v⊆t
c (u
,v
)c(u,v)
c(u,v)
最小割為割的容量最小的那個。
增廣路在殘量網路中s到t的一條簡單路徑【容量為0視作斷開】
結論:一.增廣後的網路的流量等於殘量網路中流量加上流量網路中流量。
二.增廣後流量網路中流量增加
三.對於任意流f,任意割之間的網路流量不變。
四. 任意流的流量不超過任意割的容量。
定理:最大流最小割定理
對於乙個網路g,下面三個命題總是等價
1.流f是g的最大流。
2.當前流f 的殘量網路g_f上不存在增廣路。
3.存在某個割使得|f| = c(s, t)成立。由引理四可知,滿足條件的割必定是最小割。
最大流演算法:
一.增廣路演算法(ff演算法):
1.在圖上找到一條增廣路
2.去增廣路上的殘量最小值v。(也就是流過的路徑中流量最小的那乙個)
3.將答案加上v。
4,.將增廣路上所有邊的殘量減去v,反向邊的殘量加上v。
重複上邊4個步驟直到找不到增廣路為止。
二.ek演算法
該演算法是在ff演算法基礎上的改進。
考慮每次都選擇最短的增廣路進行增廣。
【增廣路長度定義為源點到匯點經過的邊數】
三.dinic演算法
對於ek演算法有乙個顯然的優化:
ek演算法是一遍bfs中找到一條增廣路。
而dinic演算法是一遍bfs後構建出乙個可行網路,在可行網路中dfs多條增廣路進行增廣。
可行邊:在殘量網路中,若兩個端點間的最短路恰好差1,就稱之為可行邊
可行網路:由可行邊組成的網路
然後發現網路流的模板其實很容易,但主要關鍵是對乙個問題建模,轉換成網路流的問題。所以網路流問題的難點就是如何建模。
推薦部落格
2019正睿金華集訓 0804總結
今天感受了b班考試的難度,果然好難,接近爆蛋,暴力分都不太好拿。考試歷程 先看了一下三個題面,發現就第二題的暴力好寫一點,隨後又想到了並查集,然後去寫t2,過了樣例然後我就不管了 以為自己可以拿到暴力分 t3這道題我只想說,貌似除了暴力我好像也寫不了,於是我寫了乙個大暴力,由於是輸出方案,評測機是s...
2019 8 10 金華正睿集訓總結Day14
今天講的例題部分day1講過,這裡不重複了,見day1部落格 期望的平方和平方的期望不同 e x1 x2 2 e x1 2 e x2 2 2e x1x2 當x 0或1 時,x2 x 乙個重要的等式 只對第一行設變數,最後一行列方程 需要注意零轉移情況 有時候max的期望不好算,但min的期望很好算 ...
2019 8 12 金華正睿集訓總結Day16
n個數的排列,其中有k個滿足pi i 1的排列個數 e n,k k 1 e n 1,k n k e n 1,k 1 斯特林數 尤拉數的求和技術及應用 從左到右填數,記錄上乙個填的在未填數中的排名 從小到大 從大到小 插入數,記錄某些資訊 對十進位制數 二進位制數的某個統計 統計 l,r 內滿足某個條...