網路流之最大流問題

2021-07-11 21:00:54 字數 1630 閱讀 1598

網路流的三個性質:

1、容量限制: f[u,v]<=c[u,v]

2、反對稱性:f[u,v] = - f[v,u]

3、流量平衡: 對於不是源點也不是匯點的任意結點,流入該結點的流量和等於流出該結點的流量和。

只要滿足這三個性質,就是乙個合法的網路流.

最大流問題,就是求在滿足網路流性質的情況下,源點 s 到匯點 t 的最大流量。

演算法的關鍵在於

1)如何找出增廣路徑。

2)如何更新流量

何為增廣路徑,說的直白些,所謂增廣路徑,就是找到這樣一條路徑,其流量不滿,未達到容量上限。所有的可能的增廣路徑在一起便構成了殘量網路。

殘量網路:為了更方便演算法的實現,一般根據原網路定義乙個殘量網路。其中r(u,v)為殘量網路的容量。r(u,v) = c(u,v) – f(u,v),通俗地講:就是對於某一條邊(也稱弧),還能再有多少流量經過。

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

**最大流:

可以證明,可行流為最大流,當且僅當不存在新的增廣路徑。

下面是**實現:

#include#include#include#include#includeusing namespace std;

#define inf 0x3f3f3f

#define maxn 100000

struct edge

};struct edmondskarp

}if(a[t])break;

}if(!a[t])break;

for(int u=t; u!=s; u=edges[p[u]].from)///沿著増廣路更新流

flow+=a[t];

}return flow;

}} w;

int main()

cout<

}}/*

輸入8 6

1 2 6

2 3 4

1 4 7

4 5 2

4 3 3

2 5 4

5 6 8

3 6 4

輸出10

*/

網路流問題之最大流

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

網路流之最大流

網路流之最大流 一 問題引入。有n個排水口,不同的排水口之間有m條水管連線,水一開始從源點s流出,最終到達t。每條邊 水管 都有乙個最大的流量。除了s,t外,每個排水口的流入量都要等於流出量,詢問最多能有多少水到達終點t 如圖所示 即poj 1273 可以將問題進行如下整理 1 用c e 表示每條邊...

網路流之最大流

因為網上介紹網路流和最大流理論的文章非常的多,也都解釋的非常清晰並附帶 再加上繪圖技術不佳,語文表達極差,就只講解一下程式實現部分。想看理論講解及演算法正確性證明的讀者可以上網搜一搜,這裡推薦一篇部落格,鏈結如下 那麼,既然網上的資源那麼多,為什麼還要寫這篇部落格呢?一是為了湊數做筆記,二是網上的許...