網路流問題之最大流

2021-09-25 14:43:52 字數 1376 閱讀 6671

什麼是網路流?

得到的sum值就是最大流

這是一道模板題。

給定 n 個點,m 條邊,給定每條邊的容量,求從點 s 到點 t 的最大流。

第一行四個整數n,m,s,t。

接下來的 m 行,每行三個整數u,v,c,表示從 u 到 v,流量為 c 的一條邊。

資料保證有 1≤n≤100,1≤m≤5000,0≤c≤2​31​​−1。

輸出點 s 到點 t 的最大流。

7   14   1   7

1   2   5

1   3   6

1   4   5

2   3   2

2   5   3

3   2   2

3   4   3

3   5   3

3   6   7

4   6   5

5   6   1

6   5   1

5   7   8

6   7   7

14
#include//時間複雜度為o(n^2*m)

#include#include#include#define int long long

const int inf=0x3f3f3f3f;

const int maxn=3e5+10;

using namespace std;

struct edgee[maxn<<1];//表示兩倍maxn值

int s,t,n,head[maxn],q[maxn],level[maxn],tot;

//head[i]陣列表示i點的鄰接點第幾條邊開始算,tot為head陣列計數

//q陣列用來模擬廣搜的佇列,s,t表示隊頭隊尾

//level陣列用來表式進入某點時的最小層次

void add_edge(int u,int v,int c)//鏈式前向星,將鏈式圖轉換成一維數**

; head[u]=tot++;

}bool bfs()}}

}return false;

}int dfs(int f,int u)

int d=0,used=0;

for(int i=head[u];i!=-1;i=e[i].nxt)}}

if(!used)

return used;

}int dinic()//廣搜裡套深搜為了防止廣搜不斷深入沒有結束點,並且只有一條增廣路徑

}return max_flow;

}signed main()

cout << dinic() << endl;

return 0;

}

網路流之最大流問題

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

網路流之最大流

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

網路流之最大流

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