網路流,屬於圖論的一種。
網路流看上去是乙個新的東西,實際上就是新瓶裝舊酒,相信講完之後你會發現這玩意的一些基礎定義什麼的跟有向圖沒啥差別。
因為網路流演算法有點多,於是本文在講述基礎定義之外同時提供演算法導航,將後續的演算法學習筆記新增入本部落格中。
首先我們需要明白一點:網路流是個啥?
實際上,網路流就是一張無向圖,只不過給圖上的東西換了換名字。
比如看看下面這張圖。
看一下這張有向圖,這在網路流裡面叫做『網路』。
仔細看一下,你會發現圖中有兩個特別節點:s,t
s,ts,
t。s
ss 叫做『源點』,t
tt 叫做『匯點』。
圖上的邊權叫做『流量』。
看不懂沒關係,我初學的時候也看不懂,接下來拿乙個例子來說明網路流到底是個啥:
假設 s
ss 是一座水庫,含有無窮多的水,t
tt 是你家所在的位置,途中有 5 個湖,標號為 1,2
,3,4
,51,2,3,4,5
1,2,3,
4,5,假設湖能夠存下無窮多的水。
當然,水要流到你家是需要經過一些路徑的,但是這些路徑不是無限量送水的,比如說從 s
ss 到 1
11 就只能送 2
22 單位的水,多的也不能送。
這樣就能理解網路流了吧?
這張有向圖就是網路流中的『網路』,在網路中『源點』就是水庫,『匯點』就是你家,而『流量』就是每條邊最多能夠通過的水量。
網路流的基礎定義就是這些。
導航之前先簡要給出網路流中的幾個演算法:
最大流最大流就是問從源點到匯點最多能夠通過多少流量,也就是到你家最多還剩多少水。
最小割最小割有一點抽象,主要就是問刪掉哪些邊使得源點與匯點不再連通,輸出邊權最小值。
可以證明,最大流=最小割。最小費用最大流(簡稱費用流)
比如說現在運輸要錢了,從乙個湖到另乙個湖運輸是要錢的,每運一單位的水就需要一定量的錢,請問在滿足最大水量的前提下最小的錢數。
上下界網路流
這個時候,每一條邊的流量需要在一定範圍 [l,
r][l,r]
[l,r
] 內,不能少於 l
ll 也不能多於 r
rr,你需要確定每一條邊的流量使得除了源點匯點之外的所有點流出量等於流入量。
或者你可以簡單理解為連線湖的路徑上面有些發電站,為了保證發電站正常工作,通過的水流量最少為 l
ll,但是不能太多以免損壞機器,最多為 rrr。
演算法學習筆記導航:
洛谷網路流 24 題專項訓練(大致按照難度遞增):
題單:備註:最後一題『機械人規劃路徑問題』根據洛谷討論區的帖子,此題疑似為假題,不可做,暫時不進行練習。
雖然最後一題有人通過,但是:
(討論編號:248351)
由於一些特殊原因,這個筆者的專項訓練鴿子了,預計要很久填坑。
博文:
演算法學習筆記1
1 二分查詢 int arr new int binatsearch arr,12 public static int binatsearch int arr,int a else return 1 使用要求 1 有序 實現思路 1 確定最壞情況沒找到 low height 2 二分查詢 基於最低最...
網路流之SAP演算法學習
終於決定開始學習網路流了 圖論演算法理論 實踐與應用 那本書講了很多關於求最大流的演算法,然後我就只挑了一種傳說中神奇的sap演算法學習。首先引入幾個新名詞 1 距離標號 所謂距離標號 就是某個點到匯點的最少的弧的數量 即邊權值為1時某個點到匯點的最短路徑長度 設點i的標號為level i 那麼如果...
網路流之SAP演算法學習
終於決定開始學習網路流了 圖論演算法理論 實踐與應用 那本書講了很多關於求最大流的演算法,然後我就只挑了一種傳說中神奇的sap演算法學習。首先引入幾個新名詞 1 距離標號 所謂距離標號 就是某個點到匯點的最少的弧的數量 即邊權值為1時某個點到匯點的最短路徑長度 設點i的標號為level i 那麼如果...