參考博文位址
本文是小白學習記錄之用
流量:一條邊當前承受的水量,每條邊/弧都會有乙個流量,表示為函式 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,...