5048 - 二叉树:提高:最近公共祖先(LCA)-模板1

通过次数

48

提交次数

74

时间限制 : 1 秒
内存限制 : 128 MB

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

输入

第一行包含三个正整数 N,k,M,SN,k,M,S,分别表示树的结点个数、几条边链接,询问的个数和树根结点的序号。

接下来 kk 行每行包含两个正整数 x,yx, y,表示 xx 结点和 yy 结点之间有一条直接连接的边(数据保证可以构成树,可能有重路,读入时删除)。

接下来 MM 行每行包含两个正整数 a,ba, b,表示询问 aa 结点和 bb 结点的最近公共祖先。

输出

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

样例

输入
复制

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

输出
复制

4
4
1
4
4

提示

提示

对于 30%30\% 的数据,N10N\leq 10M10M\leq 10

对于 70%70\% 的数据,N200N\leq 200M1000M\leq 1000

对于 100%100\% 的数据,110001 \leq 1000M140000M\leq 1400001x,y,a,bN1 \leq x, y,a ,b \leq N不保证 aba \neq b

样例说明:

该树结构如下: 第一次询问:2,42, 4 的最近公共祖先,故为 44

第二次询问:3,23, 2 的最近公共祖先,故为 44

第三次询问:3,53, 5 的最近公共祖先,故为 11

第四次询问:1,21, 2 的最近公共祖先,故为 44

第五次询问:4,54, 5 的最近公共祖先,故为 44

故输出依次为 4,4,1,4,44, 4, 1, 4, 4