網路流 (基礎學習)

2021-07-15 16:38:50 字數 1646 閱讀 3185

流網路g(v,e)是乙個有向圖,其中每條邊( u, v )∈e 均有一非負容量 c( u, v ) ≥ 0,規定:若 u , v ∉e,則 c( u, v ) = 0。

網路中由兩個特殊點: 源點s和匯點t

網路中的邊相當於是粗細不同的水管,c( u, v ) 相當於是水管的直徑。

流網路g的流是乙個實值函式 f : v×v -> r,且滿足下列三個性質:

(1)容量限制:對於∀u

,v∈v

,要求f

(u,v

)≤c(

u,v)

。 (2) 反對稱性:對於∀u

,v∈v

,要求f

(u,v

)=−f

(v,u

) 。

(3) 流守恆性:對於∀u

,v∈v

−s,t

,要求∑

f(u,

v)=0

。最大流最小割定理:最小割的容量等於最大流

割:割是乙個邊集,去掉這個邊集會使得s到不了t。

最小割:邊集容量最小的割。

殘留容量:不超過容量限制下,某條邊還能通過的額外的網路流量:cf

(u,v

)=c(

u,v)

−f(u

,v)

殘留網路:可以理解成由可以容納更多流的邊組成的網路,起始網路也是一張殘留網路。

增廣路徑:一條從源點到匯點的路徑,要求該路徑上每條邊的殘留容量均大於0。這條路徑上可以增加的最大流量為所有邊的殘留容量中的最小值。

定理:如果

f 是具有源點s和匯點t的流網路(v

,e)中的乙個流,則下列條件是等價的:

(1)f

是 g的乙個最大流

(2) 殘留網路

g 不包含增廣路徑

(3) 對

g的某個割,有|f

|=c(

u,v)

幾種求最大流最小割的演算法:ed

mond

skar

p : 先在殘留網路上進行bfs,找出一條增廣路徑,沿著增廣路徑進行增廣,找出路徑上的最大流f,即最小的殘留容量。再更新殘留網路,對於每條路徑上的邊(u

,v) ,f(

u,v)

+=f ,cf

(v,u

)+=f

並且還有 f(

v,u)

−=f ,cf

(v,u

)+=f

,後兩個式子保證流的守恆性,也給了系統糾正錯誤的機會。不斷重複這兩個過程,當無法找到增廣路徑時,最大流就找到了。di

nic :因為ed

mond

skar

p 演算法中的bfs一次只增廣一條增廣路,時間上很浪費,所以di

nic 演算法再前者基礎上進行了改進,在bfs時。給每個節點加上乙個距離標號,表示與源點s的距離,在找增廣路時只需沿著距離標號遞增的順序即可。相當於dfs,多次增廣。is

ap:isap在dinic的基礎上多了乙個gap優化,gap[i]記錄標號為i的點的個數,當網路出現斷層即gap[i] == 0時,說明以及不存在增廣路,也就找到了最大流。

預留推進(p

ush−

rela

ble)

演算法:

網路流基礎

給定指定的乙個有向圖,其中有兩個特殊的源點s和匯點t,每條邊有指定的容量,求滿足條件的從s到t的最大流。殘量網路 容量網路 流量網路 概念就不講了吧,顧名思義。增廣路 設 f 是乙個容量網路 g 中的乙個可行流,p 是從 vs 到 vt 的一條鏈,若 p 滿足下列條件 則稱 p 為關於可行流 f 的...

網路流學習記錄

文章更新中 費用流 再不冒個泡我都以為我退役了 luogup3376最大流模板 關於網路流的講解其實網上很多,具體的這裡就不再多說了,就說幾點新學網路流要注意的地方吧 cnt要賦上初值,要麼為 1,要麼為1,這樣它是從2或者0開始的,保證了每次異或後的兩個邊是對應的 大部分情況下,盡量使用dinic...

網路流學習筆記

先宣告,來自網路,寫得也比較亂,如果有任何問題可以聯絡博主。首先,我們來理解下網路流。在乙個有向圖上選擇乙個源點,乙個匯點,每一條邊上都有乙個流量上限 以下稱為容量 即經過這條邊的流量不能超過這個上界,同時,除源點和匯點外,所有點的入流和出流都相等,而源點只有流出的流,匯點只有匯入的流。這樣的圖叫做...