#H1050. 树链还是简单一点好

树链还是简单一点好

题目描述

银河系有一个树星。

众所周知,树星的道路是树形结构,也就是说,如果树星上一共有 nn 座城市,那么就存在 n1n-1 条双向道路使得各个城市间相互连通,并且默认每条道路的长度为 11

小 M 是树星的一只咕噜,最近它偶然获得了一台来自人类的超空间穿梭机。

这台机器非常奇妙,只要你确定了一个目标地点,你便可以使用该机器迅速地穿梭过去。由于这台机器十分 BUG,于是树星的咕噜们便制定了限制穿梭的规则,规定小 M 必须在中转站才能使用穿梭机,而当小 M 要求使用穿梭机时,必须征得他们的同意。

具体规则如下,假定起点为 SS,小 M 首先确定一个目标地点 TT,然后报告树星的咕噜们,它们会为小 M 确定一个中转站 PP,这个中转站必须位于 SSTT 的正中间。若设 dista,bdist_{a,b}a,ba,b 两点间的最短距离,那么中转站 PP 需要满足 distS,P=distP,Tdist_{S,P}=dist_{P,T},而且为了限制小 M 的能力 ,从起点 SS 到中转点 PP 的路程必须由小 M 徒步行走。

由于咕噜们的计算机珂学家前天刚去世,现在需要你来帮助它们解决小 M 的报告,要求对于小 M 的每一次报告的起点 SS 和目标点 TT,判断是否存在中转点 PP,使得 PP 位于 SSTT 的正中间。如果存在,输出中转点 PP 的标号,以及小 M 需要徒步行走的距离。否则,你只好委婉地拒绝小 M 的请求,输出 -1

注意: 由于小 M 比较懒,他希望自己走的路程能够尽可能短。所以若有多个 PP 点符合条件,请选择让小 M 走的路程最短的点作为 PP 点。

由于小 M 将会进行多次长途跋涉,所以他会给出多个询问。

输入格式

第一行一个整数 nn 表示树星上城市的数量。
接着 n1n-1 行,每行两个整数 u,vu,v 表示城市 uu 和城市 vv 之间存在一条双向道路。
然后是一行一个整数 qq,表示询问数量。
接着 qq 行,每行两个整数 S,TS,T,含义如题意所述。

输出格式

qq 行,每行两个整数 p,disp,dis,表示最优的答案为 pp,并且该点离 x,yx,y 两点的距离为 disdis
注意: 若没有满足条件的点,你仅需要输出一行 -1

8
1 2
2 3
2 4
1 5
5 6 
5 7
7 8
5
1 3
2 5
7 4
8 8
1 5
2 1
1 1
1 2
8 0
-1

样例说明 1

下面是树星上任意两城市之间的距离:

1 2 3 4 5 6 7 8
1 0 1 2 1 2 3
2 0 1 2 3 4
3 0 2 3 4 5
4 0
5 0 1 2
6 0 2 3
7 0 1
8 0

对于 55 个询问:

  1. 221,31,3 的距离均为 11
  2. 112,52,5 的距离均为 11
  3. 117,47,4 的距离均为 22
  4. 888,88,8 的距离均为 00
  5. 没有点离 1,51,5 的距离相同。

数据规模与约定

Subtask 1(30 pts): n,q2×103\texttt{Subtask 1(30 pts): } n,q \le 2 \times 10^3
Subtask 2(10 pts):\texttt{Subtask 2(10 pts):} 所有询问均满足 x=yx=y
Subtask 3(10 pts):\texttt{Subtask 3(10 pts):} 所有询问均满足 x=1x=1
Subtask 3(50 pts):\texttt{Subtask 3(50 pts):} 无特殊限制。

对于 100%100\% 的数据,1n,q1051 \le n,q \le 10^51x,y,u,vn1\le x,y,u,v \le n