標籤:
// 此博文為遷移而來,寫於2015年2月2日,不代表本人現在的觀點與看法。原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vr12.html 今天我們來講一講網路流。想當年的“網路流大神”的稱號記憶猶新。 網路流,顧名思義,在網路上流。它的演算法:Edmond-Karp演算法,Dinic演算法。首先我們來介紹一下Edmond-Karp演算法,他的速度很慢,但是比較好理解,並且代碼簡單一些,一些大神都直接忽視掉這個老爺速度的演算法了 = =。 網路流是什麼呢?我們先看一個很簡單的樣本例題——
1993 草地排水題目描述
Description
在農夫約翰的農場上,每逢下雨,Bessie最喜歡的三葉草地就積聚了一潭水。這意味著草地被水淹沒了,並且小草要繼續生長還要花相當長一段時間。因此,農夫約翰修建了一套排水系統來使貝茜的草地免除被大水淹沒的煩惱(不用擔心,雨水會流向附近的一條小溪)。作為一名一流的技師,農夫約翰已經在每條排水溝的一端安上了控制器,這樣他可以控制流程入排水溝的水流量。
農夫約翰知道每一條排水溝每分鐘可以流過的水量,和排水系統的準確布局(起點為水潭而終點為小溪的一張網)。需要注意的是,有些時候從一處到另一處不只有一條排水溝。
根據這些資訊,計算從水潭排水到小溪的最大流量。對於給出的每條排水溝,雨水只能沿著一個方向流動,注意可能會出現雨水環形流動的情形。
輸入描述
Input Description
第1行: 兩個用空格分開的整數N (0 <= N <= 200) 和 M (2 <= M <= 200)。N是農夫John已經挖好的排水溝的數量,M是排水溝交叉點的數量。交點1是水潭,交點M是小溪。
第二行到第N+1行: 每行有三個整數,Si, Ei, 和 Ci。Si 和 Ei (1 <= Si, Ei <= M) 指明排水溝兩端的交點,雨水從Si 流向Ei。Ci (0 <= Ci <= 10,000,000)是這條排水溝的最大容量。
輸出描述
Output Description
輸出一個整數,即排水的最大流量。
範例輸入
Sample Input
5 4 1 2 40 1 4 20 2 4 20 2 3 30 3 4 10
範例輸出
Sample Output
50
應該很好理解吧?在一張圖上(或者是一個網路上),有一個源點,一個匯點。源點匯點之間有若干條路線以及中轉站,每條路線有已知的最大流量。求源點到匯點有多少流量?先要引入一個概念——增廣路。增廣路,即從源點到匯點的道路。Edmond-Karp的原理在於,依次尋找所有增廣路,求出這條路上每條子路的最大流量的最小值,並且將這條路上的所有現有流量增加這麼多的流量。最後所有情況下的增加的流量就是答案。可能說的比較模糊,可以通過我簡明扼要高端大氣的代碼來理解: Code:
UPDATE:但是這個演算法貌似有問題= =,江哥說要加反向弧,可是網上都沒有加。。好吧下次我們來討論更厲害更常用更快速的Dinic演算法,這個大概瞭解一下就行了。
[知識點]網路流之Edmond-Karp演算法