網路流複習

2021-10-12 13:53:59 字數 2818 閱讀 2755

幾個月沒碰過網路流了,想她了,所以撿起來,這麼好的東西怎麼能不用?

網路流是啥?

​ 網路流是給定乙個有向圖,每條邊有乙個容量,這個圖還有乙個起點叫源點,乙個終點叫匯點。把有向圖想象成有多條路徑的水流管道圖,每條邊的容量就是能經過該邊的最大水流的流量。

最大流是啥?

最大流就是從源點能流向匯點的最大流量和。

增廣路徑是啥?

從源點到匯點的一條可行流路徑。

1.ekek

ek演算法

思想:每次bfs

bfsbf

s找到一條增廣路,然後建立反邊權(使其具有反悔的貪心性質),這個需要結合圖來想,直到找不到增廣路此時的流量和就是最大流。

時間複雜度:o(n

m2

)o(nm^2)

o(nm2)

,每次bfs

bfsbf

s複雜度o(m

)o(m)

o(m)

,最多找o(n

m)

o(nm)

o(nm

)條增廣路。

int n,m,g[n]

[n],f[n]

,pre[n]

;//f[i] 儲存從st到i路徑的最大流量

//pre 記錄路徑

intbfs

(int st,

int ed)

}return pre[ed]

?f[ed]:-

1;}intek(

int st,

int ed)

}return ans;

}

對應的例題講解

2.din

ic

dinic

dini

c演算法

思想:每次bfs

bfsbf

s給圖分層,這樣dfs

dfsdf

s就能避免重複走原路和不必要的路徑,每次dfs

dfsdf

s能找到多條增廣路。

時間複雜度:o(n

2m

)o(n^2m)

o(n2m)

int n,m,h[n]

,st,ed,cnt=

1,dep[n]

,cur[n]

;//dep[i] 分層 

//cur[i] 當前弧優化.

struct edgee[m<<1]

;void

add(

int u,

int v,

int w)

,h[u]

=cnt;

e[++cnt]

=,h[v]

=cnt;

}int

dfs(

int u,

int c)if(

!res)

return c;

//如果剩餘流量為0,說明最大流不能再更大了,直接返回.

}return c-res;

}bool

bfs()}

return dep[ed];}

ll s=0;

while

(bfs()

) s+

=dfs

(st,inf)

;printf

("%lld\n"

,s);

對應的例題講解

1.求最大流。

常見題型:

1.給定兩個集合a,b

a,ba,

b,求最大的集合匹配。

思路:建圖,源點連集合a

aa,b

bb連向匯點,然後a,b

a,ba,

b根據題目給的條件建邊,然後跑最大流。

2.求最大流最小費用。在ekek

ek基礎上,跑spf

aspfa

spfa

即可。3.二分圖最大匹配。

跑最大流即可。

對應的例題講解:

傳送門

4.最大權閉合子圖

閉合子圖是對於每個點的後繼都在該子圖里。

常用於題型:給定若干點,每個點的點權可正,可負,選取每個正權點時必須選擇幾個負權點,我們想要求出最大權的閉合子圖,就可以源點與正權點建立權值邊,負權點與匯點連權值的絕對值的邊,然後正權點與必須選擇的負權點連權值為inf

infin

f的邊(保證不會被割)。

a ns

=(∑正

權邊−∑

不被選的

正權−∑

被選的負

權邊的絕

對值之和

)=∑正

權邊−最

小割

ans=(\sum正權邊-\sum不被選的正權-\sum被選的負權邊的絕對值之和)=\sum正權邊-最小割

ans=(∑

正權邊−

∑不被選

的正權−

∑被選的

負權邊的

絕對值之

和)=∑

正權邊−

最小割.

根據最小割最大流定理,所以我們跑最大流即可。

例題:

例題1例題2例題3

關於這個知識點如果不理解,可以去下面的文章學習。

傳送門1

傳送門2

知乎_pecco

網路流複習

模型轉化 原題求最小代價,則直接設割掉的是需要選擇的。若原題求最大收益,則設割掉的是不選擇的,最後用總和減去最小割就是答案。1.3.1定義 1.3.2應用方法 給出的圖一般是乙個有向圖,乙個閉合圖可以看做是一些點具有相互依賴的關係。因此對於有依賴關係,並且題目可以轉化成給某些點賦權為正,某些點賦權為...

網路流複習計畫

既然是複習網路流,那就不會去做水題了吧233 a.bzoj3996 tjoi2015線性代數 看到題就被嚇壞了2333。線性代數根本沒看完好嗎?然後。md轉個模型就是網路流了 題目大意 給定乙個n n 的矩陣b 和乙個1 n 的行向量c 求乙個1 n 的01矩陣a 使 a b c at 最大 a b...

網路流複習計畫

以前一直沒有刻意去練習過網路流的建圖,相當於完全不會網路流。1 usaco4.2 草地排水drainage ditches 最大流 2 清理雪道 最小流 3 有源匯上下界最大流 有源匯上下界最大流模板題 4 有源匯上下界最小流 有源匯上下界最小流 5 bzoj3698 xww的難題 6 士兵占領 7...