Dinic演算法 P3376 模板 網路最大流

2021-07-29 09:05:48 字數 2949 閱讀 9485

描述

input format:

第1行: 兩個用空格分開的整數n (0 <= n <= 200) 和 m (2 <= m <= 200)。n是農夫john已經挖好的排水溝的數量,m是排水溝交叉點的數量。交點1是水潭,交點m是小溪。

第二行到第n+1行: 每行有三個整數,si, ei, 和 ci。si 和 ei (1 <= si, ei <= m) 指明排水溝兩端的交點,雨水從si 流向ei。ci (0 <= ci <= 10,000,000)是這條排水溝的最大容量。

output format:

輸出乙個整數,即排水的最大流量。

sample input

5 4

1 2 40

1 4 20

2 4 20

2 3 30

3 4 10

sample output

50dinic鄰接陣列的做法:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define min(a,b) a#define max(a,b) a>b?a:b

#define cl(a,num) memset(a,num,sizeof(a));

#define eps 1e-12

#define inf 0x7fffffff

const

double pi = acos(-1.0);

typedef __int64 ll;

const

int maxn = 300 ;

using

namespace

std;

int n , m;

int flow[maxn][maxn],dis[maxn] ;//dis[i],表示 到 原點 s 的 層數

int bfs()// 重新 建 圖 (按 層數 建圖)}}

if(dis[n] > 0) return

1; else

return

0 ;//斷層

}int dfs(int x,int mx)// 查詢路徑上的最小的流量

}return

0 ;}

int main()

int ans = 0;

int res;

while(bfs())

printf("%d\n",ans);

}}

模板題:

題目描述

如題,給出乙個網路圖,以及其源點和匯點,求出其網路最大流。

輸入格式:

第一行包含四個正整數n、m、s、t,分別表示點的個數、有向邊的個數、源點序號、匯點序號。

接下來m行每行包含三個正整數ui、vi、wi,表示第i條有向邊從ui出發,到達vi,邊權為wi(即該邊最大流量為wi)

輸出格式:

一行,包含乙個正整數,即為該網路的最大流。

輸入輸出樣例

輸入樣例#1:

4 5 4 3

4 2 30

4 3 20

2 3 20

2 1 30

1 3 40

輸出樣例#1:

50 說明

時空限制:1000ms,128m

資料規模:

對於30%的資料:n<=10,m<=25

對於70%的資料:n<=200,m<=1000

對於100%的資料:n<=10000,m<=100000

樣例說明:

題目中存在3條路徑:

4–>2–>3,該路線可通過20的流量

4–>3,可通過20的流量

4–>2–>1–>3,可通過10的流量(邊4–>2之前已經耗費了20的流量)

故流量總計20+20+10=50。輸出50。

dinic 模板

#include 

#include

#include

#include

using

namespace

std;

const

int inf = 0x7fffffff;

int v, e,st,ed,cnt=0;

int level[10005],head[10005];

int si, ei, ci;

struct edgeedge[200100]; //....

void add_eg(int u,int v,int e)

void add(int u,int v,int e)

bool dinic_bfs() //bfs方法構造層次網路}}

return level[ed] != 0; //question: so it must let the sink node is the mth?/the way of yj is give the sink node's id

}int dinic_dfs(int u, int cp) }}

return tp;

}int dinic()

return sum;

}int main()

int ans = dinic();

printf("%d\n", ans);

return

0;}

Dinic模板 洛谷P3376

dinic演算法是網路流最大流的優化演算法之一,每一步對原圖進行分層,然後用dfs求增廣路。時間複雜度是o n 2 m dinic演算法最多被分為n個階段,每個階段包括建層次網路和尋找增廣路兩部分。dinic演算法的思想是分階段地在層次網路中增廣。它與最短增廣路演算法不同之處是 最短增廣路每個階段執...

P3376 模板 網路最大流dinic演算法

如題,給出乙個網路圖,以及其源點和匯點,求出其網路最大流。輸入格式 第一行包含四個正整數n m s t,分別表示點的個數 有向邊的個數 源點序號 匯點序號。接下來m行每行包含三個正整數ui vi wi,表示第i條有向邊從ui出發,到達vi,邊權為wi 即該邊最大流量為wi 輸出格式 一行,包含乙個正...

洛谷P3376 模板 網路最大流 Dinic模板

之前的dinic模板照著劉汝佳寫的vector然後十分鬼畜跑得奇慢無比,雖然別人這樣寫也沒慢多少但是自己的就是令人捉急。改成鄰接表之後快了三倍,雖然還是比較慢但是自己比較滿意了。雖然一開始ecnt從0開始wa了一發。之前的碼風也十分鬼畜呀縮排只縮1 2格不懂自己怎麼想的。反正今天就安心劃划水。inc...