網路流演算法模板

2022-05-05 21:51:13 字數 2358 閱讀 3024

1、基於ford-fulkerson方法的edmonds-karp演算法

用廣度有限搜尋來實現對增廣路徑p 的計算。即,如果增廣路徑是殘留網路種從s 到t 的最短路徑,則能夠改進ford-fulkerson的界。

view code

1

//做一次增廣路徑的流量統計23

int augment() else

30 }

31 }

32 }

33if(!flag) return

0;34 v = n; ans = inf;

35while(pre[v] != -1)

39 v = n;

40while(pre[v] != -1)

45return ans;

46 }

2、dinic演算法

詳細講解:'s_algorithm

其實就是對原來的流網路用bfs進行分層,找到一條增廣路徑後退到節點pos,節點pos滿足 f(pos, pos->next) = c(pos, pos->next);然後再進行bfs找經過pos的其他增廣路徑。

view code

1

int g[n][n];

2int layer[n];

3bool vis[n];45

int s, t;67

bool layer()

21else q.push_back(i);

22 }

23 }

24 }

25return

false;

26 }

2728

int dinic()

47 }

48 sum += min;

49for(i = 1; i < q.size(); i++)

55 }

56while(!q.empty() && q.back() != pos)

60 } else

67 }

68if(i > t) q.pop_back();

69 }

70 }

71 }

72return sum;

73 }

dinic演算法鄰接表實現,很強大的模板。

view code

#include #include 

#include

#include

#define rep(i, n) for(i = 0; i < n; ++i)

#define for(i, l, h) for(i = l; i <= h; ++i)

#define ford(i, h, l) for(i = h; i >= l; --i)

#define cl(arr, val) memset(arr, val, sizeof(arr))

using

namespace

std;

const

int n = 3000

;const

double inf = ~0u

;struct

node g[n*n];

inthead[n], t;

intlayer[n];

int q[n*1000

];int

s, t;

void

init()

void add(int u, int v, double

c) bool layer() }}

return

false;}

double find()

}for(i,

1, top - 1

) sum +=flow;

top =pos;

} else

if(i != -1) q[top++] =i;

else}}

return

sum;

}double

dinic()

intmain()

for(i,

1, m)

while(l--)

printf(

"%.4lf\n

", exp(dinic()));

}return0;

}

網路流演算法模板

引用於一些大佬的文章 dinic演算法 第二個模板為白書的寫法 poj1273為例 題意 m條路徑,n個點,每條路徑輸入起點,終點和流量,求源點到匯點的最大流量 include include include include define inf 9999999 using namespace st...

網路流基礎演算法模板

網路流是一種非常玄妙的演算法,被廣泛地用於各種有權值存在或一對多的匹配問題中。而網路流又有許多數學性質,比如最大流等於最小割等等。本篇主要介紹常用的dinic最大流演算法。網路,就是一張有點有邊圖。其中有兩個特殊的點 源點和匯點。網路流中的每一條邊就好比一條水管,容量就好比是這個水管的粗細。我們要求...

網路流EdmondsKarp演算法模板理解

先推薦乙個講網路流的部落格,我的網路流知識均吸收於此 傳送門 edmondskarp演算法基本思想 從起點到終點進行bfs,只要存在路,說明存在增廣路徑,則取這部分路 權值最小的一部分,即為增廣路徑 也就是這一部分路的最大流量 然後將這條路上的正向權值都減去min,反向權值都加上min 即,m i ...