Problem D: 最近公共祖先(LCA)
Memory Limit:128 MB
Time Limit:1.500 S
Judge Style:Text Compare
Creator:
Submit:50
Solved:24
Description
给定一棵N(编号1到N)个节点的有根树,请求出指定两个点直接最近的公共祖先。
LCA(Least Common Ancestor),顾名思义,是指在一棵树中,距离两个点最近的两者的公共节点。
对于树中节点x而言,从根节点到达x的这一条路径中经过的所有节点,都称为x的祖先。 如下图所表示的树中, 根节点为1、2都是节点3与节点4的祖先。对于3和4这对节点而言,从3出发往上朝根走和从4出发往上朝根走的两条路径最早交汇的地点是2号节点,因此2号节点是3和4的最近公共祖先。
Input
输入第一行三个正整数N,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。
接下来N−1 行每行包含两个正整数 x,y,表示 x结点和 y 结点之间有一条直接连接的边(数据保证可以构成树)。
接下来 M行每行包含两个正整数 a,b,表示询问 a结点和 b结点的最近公共祖先。
Output
输出包含M 行,每行包含一个正整数,依次为每一个询问的结果。
Sample Input Copy
6 2 1
1 2
1 5
2 3
2 4
5 6
4 6
4 2
Sample Output Copy
1
2
HINT
,,不保证a 不等于 b