網路流最大流問題 1 增廣路 EK)

2021-07-15 00:11:09 字數 1062 閱讀 5783

增廣路*

增廣路定義:在殘量網路中的一條從s通往t的路徑,其中任意一條弧(u,v),都有其殘量網路流量r[u,v]>0。

其中綠色的就是增廣路。

增廣路演算法*

增廣路演算法:每次用bfs找一條最短的增廣路徑,然後沿著這條路徑修改流量值(實際修改的是殘量網路的邊權)。當沒有增廣路時,演算法停止,此時的流就是最大流。

增廣路演算法的效率*

設n = |v|,  m = |e|

每次增廣都是一次bfs,效率為o(m),而在最壞的情況下需要(n-2增廣。(即除源點和匯點外其他點都沒有連通,所有點都只和s與t連通)

所以,總共的時間複雜度為o(m*n),所以在稀疏圖中效率還是比較高的。

hoj1532 模板**

#include #include #include #include #include #include #include using namespace std;  

const int n = 1100;

const int inf = 0x3f3f3f3f;

struct node

; vectorv[n];

bool used[n];

void add_node(int from,int to,int cap) //重邊情況不影響

);

v[to].push_back((node));

} int dfs(int s,int t,int f)

} }

return 0;

} int max_flow(int s,int t)

} int main()

{ int n,m;

while(~scanf("%d%d",&n,&m))

{ memset(v,0,sizeof(v));

for(int i=0;i

網路流最大流 EK演算法

網路流是模仿水流解決生活中類似問題的一種方法策略,來看這麼乙個問題,有乙個自來水廠s,它要向目標t提供水量,從s出發有不確定數量和方向的水管,它可能直接到達t或者經過更多的節點的中轉,目前確定的是每條水管中水流的流向是確定的 單向 且每個水管單位時間內都有屬於自己的水流量的上限 超過會爆水管 問題是...

網路流之最大流問題 增廣方法

網路流中的最大流問題求解演算法有很多,這裡就只介紹用增廣bfs演算法實現的一種 可做一般求解最大流的模板 如下 include include include include define inf 100000 無窮 define max 500 結點上限 define min x,y xq int...

網路最大流求解 增廣路演算法

增廣路演算法 根據增廣路地理,為了得到最大流,可以從任何乙個可行流開始,沿著增廣路對網路流進行增廣,直到網路中不存在增廣路為止,這樣的演算法稱為增廣路演算法。增廣路演算法流程如下。1 取乙個可行流f作為初始流 如果沒有給定可行流,則取零流作為初始流 2 尋找關於f的增廣路p,如果找到,則沿著這條增廣...