漢孤臣 倍增LCA模板

2022-06-20 21:00:10 字數 787 閱讀 2493

例題 (模板題):

**:

#include #include 

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=100000+50

;int n,deep[maxn],h[maxn],f[maxn][20

],q,cnt;

struct

node

table[maxn];

struct

nodee

tree[maxn];

void add(int x,int y) //

先儲存邊 (例題為例,先儲存無向關係)

void dfs(int x,int deepx) //

將不確定的無向邊變成父子關係 ,並完成倍增的初始化

}int query(int x,int

y)int

main()

for (int i=1,q1,q2; ii)

dfs(

1,1);

scanf("%d

",&q);

for (int i=1,q1,q2; i<=q; ++i)

return0;

}

樹的基礎內容

倍增LCA模板

注意!本篇題解不適合初學lca的同學學習,因為我講的很爛很不清楚。倍增,顧名思義,就是成倍增加的意思。我們知道,任何乙個數字都可以表示成二進位制。那麼對於一條長度為n的鏈,我們總是可以跳大概logn次到達最後。對於鏈上任意一點,我們都可以在大概logn的複雜度下詢問到,其實倍增的思路就是二分,和快速...

LCA倍增法模板

deg其實應該寫成depth吧,存的是每個結點的深度,dfs的過程是為了處理出每個結點的深度,用遞推式計算出fa u i 其中f u i 表示u的第2 i個祖先 基本思想是 d i 表示 i節點的深度,p i,j 表示 i 的 2 j 倍祖先 那麼就有乙個遞推式子 p i,j p p i,j 1 j...

lca倍增演算法模板

時間限制 1 sec 記憶體限制 128 mb 提交 244 解決 36 提交 狀態 給一棵樹,節點數為n 1 n 250,000 和q 0 q 100,000 個詢問,對於每個詢問求出所求兩點的最近公共祖先 第一行 節點數n 以下n行,第i 1行 點i的父親節點father i 假定根的父親是0 ...