#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,m,sn, m, s,分别表示结点个数、询问个数和树根编号。

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

接下来 mm 行,每行包含两个整数 u,vu, v,表示一次询问,要求输出在以 ss 为根时 LCA(u,v)\operatorname{LCA}(u,v) 的值。

输出格式

输出共 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

数据范围与提示

  • 1n2×1051 \le n \le 2 \times 10^5
  • 1m2×1051 \le m \le 2 \times 10^5
  • 1sn1 \le s \le n
  • 1u,vn1 \le u, v \le n
  • 输入的图一定是一棵树。