網路流 最大流問題

2022-05-03 12:39:17 字數 2511 閱讀 4664

簡單來說,就是在有向網路圖中,單位時間內,從開始點到結束點能通過的最大流量

許多應用都包含了流量問題,例如,公路系統中有車輛流,控制系統中有資訊流,供水系統中有水流,金融系統中有現金流等等

1、源點:出發點。

2、匯點:結束點。

3、流:就是一條可以從源點到匯點的一條合法路徑。

4、容量:每條邊都有乙個容量(水管的最大水流容量)

5、流量:就是一條可以從源點到匯點的一條合法路徑能通過的最大數量,大小取決於這條路徑上的最小容量

6、增廣路:也就是流,一條可以從源點到匯點的一條合法路徑

7、殘量:就是剩餘容量,對於一條邊來說,殘量=容量-流量

下圖是乙個交通運輸網路,有1到6共6個結點,兩個結點間的數字代表它們之間的最大運輸能力,求結點1到結點6在單位時間內的最大運輸能力(流量)?

可以看到結點1到結點6之間有多條路徑,而所有路徑的最大流量之和正是所要求的最大流量,問題轉化為求每條路徑的最大流量,以路徑:1-3-5-6為例,結點間的運輸流量分別是10、14、21,容易想到10是這條路徑的瓶頸,所以1-3-5-6的最大執行能力是10。同時也意味著,當1-3之間達到運輸瓶頸10時,1-3這條路就不再具備運輸能力了(就可以把1-3條路從圖中去掉了,同時也要把3-5-6路徑上的運輸能力減掉10,因為已經被我們找到的第一條路徑給占用了10,這樣就有了下圖),記錄下第一條路徑的最大流量10。

下面繼續找一條路徑:1-2-5-6,它的剩餘最大流量是6。按照上面的方法去掉1-2,並把2-5-6的運輸能力減6,就有了下圖:

接下來是:1-4-6,它的剩餘最大流量是5。

接下來是:1-4-3-5-6,它的剩餘最大流量是1。

接下來是:1-4-2-5-6,它的剩餘最大流量是1。

至此結點1到6之間已經沒有通路了,把各個路徑的最大流量和加起來即是所求:10+6+5+1+1=23

當bfs找到的路徑不是最優解的時候,我們需要乙個反悔機制,返回原來狀態去選擇另一種合法路徑,所以用反向邊的概念來解決這個問題。

即每條邊(i,j)都有一條反向邊(j,i),反向邊也同樣有它的容量及流量,且初始的流量值就是為正向邊的容量

詳細解釋:

時間複雜度:o(n*m2),m是邊數,n是頂點數量

注意:在讀入邊的時候,要注意重邊的情況,要用加法存邊

大佬的模板

const

int maxn = 500

;const

int inf = 0x3fffffff

;int cap[maxn][maxn];//

存邊的容量,沒有邊的初始化為0

intpath[maxn], flow[maxn];

int n;//

點的個數,編號[0,n],包括了源點和匯點。

int st, endd;//

源點和匯點

queuep;//

佇列放外面時間是262ms,放進函式裡面去之後就322ms,不懂

intbfs()}}

if (path[endd] == -1)//

即找不到匯點上去了。找不到增廣路徑了

return -1

;

return

flow[endd];

}int

edmonds_karp()

}return

mx_flow;

}

下面這份模板用起來適用**覺不是很強,注意使用吧

int flow[205][205],cap[205][205];//

flow當前流量,cap總容量

int f[205],vis[205];//

f[i]最小殘量=cap-flow,vis[i]標記i節點的上乙個最小殘量所在的位置

int mx_flow;//

最大流量,所有增廣路最小殘量之和

void bfs(int n)//

頂點數 }

}if(f[n]==0)//

容量-流量==0,一條增廣路尋找結束

flag=1

; mx_flow+=f[n];

int pos=n;//

從匯點開始更新流量

while(!flag&&pos!=1

) }}

view code

模板題:

網路流之最大流問題

網路流的三個性質 1 容量限制 f u,v c u,v 2 反對稱性 f u,v f v,u 3 流量平衡 對於不是源點也不是匯點的任意結點,流入該結點的流量和等於流出該結點的流量和。只要滿足這三個性質,就是乙個合法的網路流.最大流問題,就是求在滿足網路流性質的情況下,源點 s 到匯點 t 的最大流...

網路流問題之最大流

什麼是網路流?得到的sum值就是最大流 這是一道模板題。給定 n 個點,m 條邊,給定每條邊的容量,求從點 s 到點 t 的最大流。第一行四個整數n,m,s,t。接下來的 m 行,每行三個整數u,v,c,表示從 u 到 v,流量為 c 的一條邊。資料保證有 1 n 100,1 m 5000,0 c ...

網路流初步 最大流問題

形象理解 就好比你家小區的供水系統,所有的水都來自自來水廠,經過管道運輸到你小區的使用者,再經過下水道去往廢水處理廠,整個過程中,自來水廠就好比源點,整個網路中的管道大小限制就好比容量,其中流過的水量好比流量,而最終的處理廠就好比匯點。網路流 所有弧上流量的集合f 稱為該容量網路的乙個網路流.定義 ...