#B0234. 最近公共祖先

最近公共祖先

题目描述

给定一棵包含 nn 个结点的无根树,结点编号为 1n1 \sim n。现在指定结点 ss 为树根,从而这棵树被看作一棵以 ss 为根的有根树。

对于两个结点 u,vu,v,它们的最近公共祖先记为

LCA(u,v)\operatorname{LCA}(u,v)

它表示:在以 ss 为根的这棵树中,同时是 uuvv 的祖先,并且深度最大的那个结点。

现在有 mm 次询问。每次给出两个结点 u,vu,v,你需要输出

LCA(u,v)\operatorname{LCA}(u,v)

的值。

输入格式

输入共 n+mn+m 行。

第一行输入三个整数 n,m,sn,m,s,分别表示结点个数、询问个数和树根编号。

接下来 n1n-1 行,每行输入两个整数 u,vu,v,表示树中存在一条连接结点 uu 和结点 vv 的无向边。

接下来 mm 行,每行输入两个整数 u,vu,v,表示一次询问,要求输出在以 ss 为根时的

LCA(u,v)\operatorname{LCA}(u,v)

满足:

$$1 \le n \le 2 \times 10^5,\qquad 1 \le m \le 2 \times 10^5,\qquad 1 \le s \le n$$1u,vn1 \le u,v \le n

题目保证输入的图是一棵树。

输出格式

输出共 mm 行。

对于每次询问,输出一个整数,表示对应的最近公共祖先。

7 5 1
1 2
1 3
2 4
2 5
3 6
6 7
4 5
4 6
7 6
7 3
5 7
2
1
6
3
1