/ WHOJ / 题库 /

【模板】最近公共祖先(LCA)

【模板】最近公共祖先(LCA)

描述

如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。

格式

输入格式

第一行包含三个正整数 \(N,M,S\),分别表示树的结点个数、询问的个数和树根结点的序号。
接下来 \(N-1\)行每行包含两个正整数 \(x, y\),表示 \(x\) 结点和\( y\)结点之间有一条直接连接的边(数据保证可以构成树)。
接下来 \(M\)行每行包含两个正整数\( a, b\),表示询问\( a\)结点和\( b \)结点的最近公共祖先。

输出格式

输出包含 \(M\) 行,每行包含一个正整数,依次为每一个询问的结果。

样例1

样例输入1

5 5 4
3 1
2 4
5 1
1 4
2 4
3 2
3 5
1 2
4 5

样例输出1

4
4
1
4
4

样例解释

该树结构如下:

第一次询问:\(2, 4\)的最近公共祖先,故为 \(4\)。

第二次询问:\(3, 2 \)的最近公共祖先,故为 \(4\)。

第三次询问:\(3, 5\) 的最近公共祖先,故为 \(1\)。

第四次询问:\(1, 2\)的最近公共祖先,故为\( 4\)。

第五次询问:\(4, 5\)的最近公共祖先,故为\( 4\)。

故输出依次为 \(4, 4, 1, 4, 4\)。

限制

对于 \(100\)% 的数据,\(N≤500000,M≤500000\)。

来源

地址:\(vijos\),芜湖\(OI\)团队
作者:黑暗路西法\(08\)
模拟赛\(T2\)
\(2022.2.27 bug\)已修复