P3376 模板 網路最大流

2022-05-03 13:45:18 字數 1999 閱讀 4346

ek演算法  (個人感覺沒有dinic好理解)

1

//edmonds-karp演算法2//

時間複雜度o(n*m*m)

3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;910

const

int n=10005;11

const

int m=100005;12

const

int inf=599518803;13

14int

n,m,s,t;

15int

num_edge,head[n];

16int

val[n],pre[n];

17struct

edge

18edge[m<<1

];21

22int

read()

2330

31void add_edge(int u,int v,int

w)32

3940

bool

bfs()

4161

if(val[t])//

迴圈到了t就跳出迴圈

62break;63

}64}65

return

val[t];66}

6768

intmain()

6978

int ans=0;79

while

(bfs())

8086 ans+=val[t];87}

88 printf("

%lld

",ans);

89return0;

90 }

dinic詳解blog:

//

dinic

//快忘乾淨了

//寫一下自己能想起來的地

//改了幾遍,差不多可以想起來了,而且也明白了一些以前沒明白的地方

//emmm,在改進**中加強對**的理解程度吧算是

//開了氧氣之後可以跑到72ms啦!

//要一開始讓num_edge=1,感覺可能會因為忘寫翻車

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int n=1e4+5

;const

int m=1e5+5

;int

n,m,s,t;

int head[n],from

[n],num_edge;

intdep[n];

struct

edge

edge[m

<<1

];inline

intread()

inline

void add_edge(int u,int v,int

w)inline

bool

bfs()}}

return0;

}int dfs(int now,int

flow)

dep[now]=0; //

能從for迴圈裡出來而沒有提前return說明這個點所連出去的邊流量全都流完了(全都滿流),所以把這個點的dep設成0,他已經沒有貢獻了

return

outflow;

}int

main()

int ans=0

;

while

(bfs())

ans+=dfs(s,0x7fffffff

); printf("%d

",ans);

return0;

}

P3376 模板 網路最大流

網路流用於解決流量問題 網路流 所有弧上流量的集合f 稱為該容量網路的乙個網路流。1 定義 帶權的有向圖g v,e 滿足以下條件,則稱為網路流圖 flow network 僅有乙個入度為0的頂點s,稱s為源點。僅有乙個出度為0的頂點t,稱t為匯點。每條邊的權值都為非負數,稱為該邊的容量,記作c i,...

P3376 模板 網路最大流

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

P3376 模板 網路最大流

luogu p3376 求網路最大流.首先介紹一下網路流的基本概念.乙個帶權有向圖,邊權稱為容量.其中乙個只有出度的點,源點,乙個只有入度的點,匯點.流從源點源源不斷地產生,在匯點消失.邊的容量就是能它流過的最大流,實際流過的流成為邊的流量.源點流出的最大的流一定和匯點消失的最大的流相等,我們把這個...