Problem 模板 最近公共祖先LCA

2022-08-27 19:48:09 字數 860 閱讀 8002

time limit: 3 sec memory limit: 128 mb

給出n,q

代表乙個樹有n個點 ,樹的根為1

q代表有q個詢問,詢問a,b的最近公共祖先是哪乙個.

4 22 1

3 24 2

3 44 222

**如下

#include

#include

#define n 1000002

using namespace std;

int n,q,rt,f[n][20

],dep[n]

,a[n]

,pre[n]

,now[n]

,son[n]

,tot;

bool bl[n]

;inline

void

addx

(int x,

int y)

void

dfs(

int u,

int d)}}

intlca

(int x,

int y)

intmain()

dfs(rt,1)

;for

(int j=

1; j<

20; j++

)//處理出所有點向上跳2^j步跳到哪個點

for(

int i=

1; i<=n; i++

) f[i]

[j]=f[f[i]

[j-1]]

[j-1];

for(

int i=

1; i<=q; i++

)}

模板 最近公共祖先(LCA)

題自洛谷 如題,給定一棵有根多叉樹,請求出指定兩個點直接最近的公共祖先。輸入格式 第一行包含三個正整數n m s,分別表示樹的結點個數 詢問的個數和樹根結點的序號。接下來n 1行每行包含兩個正整數x y,表示x結點和y結點之間有一條直接連線的邊 資料保證可以構成樹 接下來m行每行包含兩個正整數a b...

模板 lca 最近公共祖先

lca hljs cpp include include using namespace std const int maxn 500001 int n,m,gen,x,y struct edgeedge 2 maxn int deep maxn fa maxn 20 deep記錄每個點的深度,fa...

最近公共祖先 LCA 模板

lca即最近公共祖先,是指 在有根樹中,找出某兩個結點u和v最近的公共祖先。時間複雜度o nlogn m n 步驟 1.將樹看作乙個無向圖,從根節點開始深搜,得到乙個遍歷序列。2.在x y區間中利用rmq演算法找到深度最小返回其下標。可以上洛谷找模板題測試 include include inclu...