#2485. 最近公共祖先
最近公共祖先
说明
一棵树如下图所示,每个节点都标有 的整数,节点 是树根。
若节点 位于根和 之间的路径中,则 是 的祖先,节点也是自己的祖先。
如下图:、、 和 是 的祖先,、、 和 是 的祖先。
若 是 的祖先和 的祖先,则 被称为 和 的公共祖先,如: 和 是 和 的公共祖先。
若 是 和 的公共祖先并且在它们的公共祖先中最接近 和 ,则 被称为 和 的最近公共祖先,如: 和 的最近公共祖先是 。
若 是 的祖先,则 和 的最近公共祖先是 ,如: 和 的最近公共祖先是 。
编写一个程序,找到树中两个不同节点的最近公共祖先。
输入
第行包含一个整数 ,表示测试用例的数量。
每个测试用例的第 行都包含整数 ,表示树中的节点数。节点用标记。
接下来的 行,每行都包含一对表示边的整数,第 个整数是第 个整数的父节点(有 个节点的树则恰好有 条边)。
每个测试用例的最后一行都包含两个不同的整数,求其最近公共祖先。
输出
对每个测试用例,都单行输出两个节点的最近公共祖先。
样例
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