#g6003. [GESP6级模拟题]最近公共祖先

[GESP6级模拟题]最近公共祖先

题目背景

"亲情树"是一款家族寻根游戏。

在游戏中,每个家族成员都有一个编号,编号为 11 的成员是整个家族的祖先。 游戏会给出成员之间的亲子关系,然后提出一些"亲情挑战":

给定两个家族成员的编号,找到他们最近的共同祖先。

例如,小 A 和小 B 都有同一个曾祖父,这个曾祖父就是他们最近的共同祖先。

现在请你来通关这个游戏。

题目描述

给定一棵有 nn 个节点的树,节点编号为 1n1 \sim n,根节点为 11

mm 次询问,每次询问给出两个节点 uuvv,求它们的最近公共祖先(Lowest Common Ancestor, LCA)。

最近公共祖先:节点 uuvv 的公共祖先中深度最大的那个。

输入格式

第一行一个正整数 nn,表示节点个数。

接下来 n1n-1 行,每行两个整数 u,vu,v,表示节点 uuvv 之间有一条边。

接下来一行一个正整数 mm,表示询问次数。

接下来 mm 行,每行两个整数 u,vu,v,表示一次询问。

输出格式

输出 mm 行,每行一个整数,表示每次询问的结果。

样例输入

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

样例输出

2
1
1

样例解释

树的形态如下:

      1
     / \
    2   3
   / \ / \
  4  5 6  7
  • 4455 的 LCA 是 22
  • 4466 的 LCA 是 11
  • 2266 的 LCA 是 11

数据范围

1n10001 \le n \le 10001m1001 \le m \le 1001u,vn1 \le u, v \le n