#2485. 最近公共祖先

最近公共祖先

说明

一棵树如下图所示,每个节点都标有 {1,2,...,16}\{1,2,...,16\}的整数,节点 88 是树根。

若节点 xx 位于根和 yy 之间的路径中,则 xxyy 的祖先,节点也是自己的祖先。

如下图:8844101016161616 的祖先,8844667777 的祖先。

xxyy 的祖先和 zz 的祖先,则 xx 被称为 yyzz 的公共祖先,如:8844161677 的公共祖先。

xxyyzz 的公共祖先并且在它们的公共祖先中最接近 yyzz,则 xx 被称为 yyzz 的最近公共祖先,如:161677 的最近公共祖先是 44

yyzz 的祖先,则 yyzz 的最近公共祖先是 yy,如:441212 的最近公共祖先是 44

编写一个程序,找到树中两个不同节点的最近公共祖先。 image

输入

11行包含一个整数 TT,表示测试用例的数量。

每个测试用例的第 11 行都包含整数 N(2N10,000)N(2≤N≤10,000),表示树中的节点数。节点用1,2,...,N1,2, ..., N标记。

接下来的 N1N-1 行,每行都包含一对表示边的整数,第 11 个整数是第 22 个整数的父节点(有 NN 个节点的树则恰好有 N1N-1 条边)。

每个测试用例的最后一行都包含两个不同的整数,求其最近公共祖先。

输出

对每个测试用例,都单行输出两个节点的最近公共祖先。

样例

2
16
1 14
8 5
10 16
5 9
4 6
8 4
4 10
1 13
6 15
10 11
6 7
10 2
16 3
8 1
16 12
16 7
5
2 3
3 4
3 1
1 5
3 5
4
3

来源

POJ1330