網路流 最大流 Edmonds Karp演算法

2021-06-20 06:57:01 字數 665 閱讀 3059

edmonds-karp演算法,複雜度o(ve^2)。思想就是找增廣路,不斷增加流量。在殘量(每條邊上流量和容量的差)圖上找一條每個邊權值都為正的路(可以通過bfs,比dfs效率高),這些邊權值裡的最小值就是這條路可以增加的流量,然後在這條路徑上更新流量。再重複找這樣的路更新流量,直到找不到這樣的路了就說明流量不能再增加了,當前的流就已經是最大流。

同時最大流也是最小割(權值和最小的割集)。設起點s,終點t,最後不能再更新的時候,a[u](u點可增流量)不為0的點放到s集合中,剩下的點放到t集合中,(s,t)就是s-t的最小割,f=c(s,t)。(跨越s,t的邊一定都是滿載,並且都是每條路上權值最小的邊)。

int edmonds_karp(){ //s,t為起點、終點

queueq;

memset(flow,0,sizeof(flow));

int f=0; //最大流

while(1){

memset(a,0,sizeof(a)); //a是每個結點可增流量

a[s]=inf; //起點有無限大的流量

q.push(s);

while(!q.empty()){ //bfs

int u=q.front();

q.pop();

for(int v=0;v<=n;v++) if(!a[v]&&flow[u][v]

網路流 最大流

網路流 題記 網路流是最近講過的最迷演算法 網路流 network flows 是一種模擬水流的解決問題方法,與線性規劃密切相關。非常重視選手在網路流上的建模技巧,畫圖是非常關鍵的。1 最大流 問題引入 有n條溝渠,與水坑s t相連,匯聚成m個點,第i條溝渠的水流的流量為c i 每乙個點的流入量和流...

網路流(最大流)

我們圍繞一道題來講解吧 藍橋杯 演算法訓練 網路流裸題 首先,何為網路流最大流問題?可行流 對於每條路線 u,v 上給定乙個實數f u,v 滿足 0 f u,v c u,v 則稱f u,v 為路線 u,v 的流量。而對於一組具有源點和匯點,且總流出量 總流入量,則稱為網路中的一條可行流。拿例子來說 ...

網路流 最大流

dinic 最大流 head x 從0開始記 這樣便於找反向邊 異或即可 當前弧優化 include include include include include include include define ll long long define ull unsigned long long d...