最大流筆記

2021-10-04 11:19:52 字數 1315 閱讀 2747

參考博文位址

本文是小白學習記錄之用

流量:一條邊當前承受的水量,每條邊/弧都會有乙個流量,表示為函式 f(u,v);流量可為 0,可為負

容量:一條邊可以承受的最大水量,每條邊/弧都會有乙個容量,表示為函式 c(u,v)

殘留容量:一條邊還可以新增加的水量,即為 容量 - 流量

流動前:

1是容量,0是流量,圈1是起點,圈4是終點,其他數字圈為各節點

增廣路:在殘量網路中的一條從 s 到 t 的合法路徑,即所有弧的殘量為正,如:圈1——>圈2——>圈4

流動後

流量由0——>1

但圈2——>圈3流量未變 ?

如果流量經過此邊會出錯

下面會解釋

殘餘流量:容量-流量

殘餘容量為0,則這條邊不能再次使用

不管怎麼流,最後到終點的流量為2

增廣路:在殘量網路中的一條從 s 到 t 的合法路徑,即所有弧的殘量為正,如:圈1——>圈2——>圈4

增廣路犯錯:

比如下面這張圖,第一次找增廣路時我們找到了藍色的這條(1−>2−>3−>4)

(紅色標記為各邊殘留流量)

那麼我們會發現:1−>2−>3−>4這條增廣路的各邊不能再次使用,最後得到的流量為1,不是我們要求的最大流。

怎麼辦?建立反邊

反邊即為新建立的路徑,給予流出去的流量的一部分反悔的機會

引用大大佬的話:

將之前流出去的流量的一部分(或者全部)反悔掉了個頭,跟隨著新的路徑流向了其它地方,而新的路徑上在到達這條邊之前所積蓄的流量 以及 之前掉頭掉剩下的流量 則順著之前的路徑流了下去。

思想結束:

演算法分為ek演算法和dinic演算法,猹猹我不會,難過。。。

最大流筆記

看了乙個下午,似懂非懂就是不懂啊。先碼住!建圖也是巨難啊!大概思路是bfs 每次bfs都過一遍,如果還可以找到增廣路就記錄答案 每次整理答案的時候加上去,同時乙個奇妙的操作 前驅加後繼減。我個人理解覺得和dfs完了取消標記一樣的感覺,就是為了消除這一步對以後的行為造成的影響,方便找到最優解。1.儲存...

最大流 學習筆記

這裡總結一下幾種最大流演算法 ek演算法應該是最大流中最簡單的了,但剛開始理解也花了不少工夫 ek演算法基於增廣路。它的思想是,每一次通過bfs不停尋找增廣路,找到以後增廣,直到找不到為止 殘量 一條邊的殘量等於該邊的容量減去該邊當前的流量,為了方便,我們可以建立殘量網路。這樣每條邊只需要對應乙個權...

最大流學習筆記(2)

1 基本的ford fulkerson方法。該方法的思想就是每次找到乙個增廣路 p 然後將增廣路 p 對應的流加到之前的流上得到新的流,一直這樣直到找不到增廣路,這時候找到的流就是最大流。演算法的偽 如下 假設容量是整數,最大流為 f 那麼while迴圈最多執行 f 次,因為每次至少使得流量增加1,...