洛谷 P3379 模板 最近公共祖先(LCA)

2021-10-23 16:34:34 字數 1185 閱讀 3953

如題,給定一棵有根多叉樹,請求出指定兩個點直接最近的公共祖先。

第一行包含三個正整數 n,m,s,分別表示樹的結點個數、詢問的個數和樹根結點的序號。

接下來 n-1 行每行包含兩個正整數 x, yx,y,表示 x 結點和 y 結點之間有一條直接連線的邊(資料保證可以構成樹)。

接下來 m 行每行包含兩個正整數 a, b,表示詢問 a 結點和 b 結點的最近公共祖先。

輸出包含 m 行,每行包含乙個正整數,依次為每乙個詢問的結果。

554

3124

5114

2432

3512

45

441

44

lca模板題,不解釋

#include

#include

using

namespace std;

int n,m,s;

int tot,hd[

5000010];

int dep[

5000010

],f[

5000010][

20];struct abcb[

5000010];

void

add(

int x,

int y)

; hd[x]

=tot;

}int

lca(

int x,

int y)

if(x==y)

return x;

k=19

;while

(k>=0)

k--;}

return f[x][0

];}void

dfs(

int x,

int fa)

}int

main()

dfs(s,0)

;for

(int j=

1;j<

20;j++

)for

(int i=

1;i<=n;i++

) f[i]

[j]=f[f[i]

[j-1]]

[j-1];

while

(m--

)return0;

}

洛谷P3379 模板 最近公共祖先(LCA)

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

洛谷 P3379 模板 最近公共祖先(LCA)

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

洛谷 P3379 最近公共祖先(LCA) 模板

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