備份 演算法模板大集錦

2022-04-30 19:36:09 字數 3280 閱讀 1036

一、介紹

這是一篇趕工趕出來並且隨時會更新的備份文章,裡面匯集了我曾學過的所有高階(也就是太長了我記不住)演算法的模板。大部分直接從以前的文章裡蒯過來,所以對於任意乙份模板,都說不定將來再次翻閱的時候忍受不了當時的格式/命名/寫法等等而進行修改。

二、目錄

1、網路流dinic演算法

2、tarjan演算法

3、倍增lca

4、ac自動機

5、主席樹

6、bkdrhash

三、正文

1、網路流dinic演算法

1 #include 2 #include 3

4#define maxn 205

5#define maxm 205

6#define inf 0x3f3f3f3f78

int m, n, u, v, f, q[maxn * maxn], h[maxn], d[maxn], o = 1

, ans;910

struct

edge e[maxm << 1

];13

14int min(int a, int

b) 17

18void add(int u, int v, int

f) , h[u] =o;20}

2122

bool

bfs()

31 head++;32}

33return d[n] != 0;34

}3536int dfs(int o, int

mif) 46}

47return

res;48}

4950

intmain()

2、tarjan演算法

1 #include 2

3#define maxn 500005

4#define maxm 50000556

intn, m, u[maxn], v[maxn], tw[maxn], ts, p, to, tb[maxn], th[maxn];

7int

w[maxn], b[maxn], s, h[maxn], o, lik[maxn];

8int

dfn[maxn], low[maxn], ins[maxn], st[maxn], tot, t, tim;

9int

f[maxn], ans;

1011

struct

edge e[maxm], te[maxm];

1415

int min(int a, int

b) 18

19int max(int a, int

b) 22

23void add(int u, int v, int

t) , th[u] =to;

25else o++, e[o] = (edge) , h[u] =o;26}

2728

void

init()

3536

void tarjan(int

o) 43

if (dfn[o] ==low[o]) 47}

4849

void

rebuild()

56 f[s] =w[s];57}

5859

void dfs(int

o) 65}66

67int

main()

3、倍增lca

1

void

prep() 78

intlca_h()

15while (x !=y)

20return

x;21 }

4、ac自動機

1 #include 2 #include 3

4#define maxm 100000556

intt, n, tot, q[maxm], ls, l, r;

7char s[55

], ch[maxm];89

struct

tree t[maxm];

1213

void

insert()

20 t[o].x++;21}

2223

void

getf()

39 of =t[of].f;40}

41if (!of) t[v].f =r;42}

43 q[tail++] =v; 44}

45 head++;46}

47}4849

intfind()

58return

ans;59}

6061

intmain()

71return0;

72 }

5、主席樹

1 #include 2 #include 3

using

namespace

std;45

#define maxn 10000567

intt, n, m, l, r, k, tot, root[maxn], b[maxn], lik[maxn];89

struct

num a[maxn];

1213

struct

cmpw

17} cw;

1819

struct

cmpn

23} cn;

2425

struct

tree t[maxn * 20

];28

29void

chg()

3536

void build(int o, int l, int r, int w, int

x) 43

44int query(int rl, int rr, int l, int r, int

k) 49

50int

main() 63}

64return0;

65 }

6、bkdrhash

1

#define x 131

2#define mod 1000000007

3int h[maxn]; char

a[maxn];

4void

gethash()

樹的各種演算法大集錦2

判定一棵二叉樹是否為完全二叉樹 bool is bitree b else 如果出隊元素為空,檢查其後是否有非空結點 return true 完全二叉樹的定義是 具有n個結點的完全二叉樹與滿二叉樹中的編號從1 n的結點一一對應。演算法思想 採用層次遍歷的方法,讓所有的結點入隊 包括空結點 當遇到空節...

前端知識點大集錦

doctype位於文件最前面,處於標籤之前,用來告知瀏覽器該用什麼文件型別規範來解析這個文件.用正確的標籤做正確的事.html語義化讓頁面的內容結構化,便於瀏覽器 搜尋引擎解析 利於seo優化 便於閱讀維護理解.行內元素 a span img input select i.塊級元素 h1 h6 p ...

排序演算法大集錦 插入類 直接插入排序

這一系列部落格的特點就是 給出每趟排序的結果 本來想著好好寫一下過程,弄個什麼的,不過覺得網上的解析太多了,都比較好。演算法導論 上面那個比喻,比做打撲克牌的插入新牌,就比較形象。所以這些部落格就算是對自己的總結吧。include void insertsort int m,int n int i,...