#P16028. [Lot2016] maxdist

[Lot2016] maxdist

题目描述

Focșani 城市由 NN 个城区组成,城市道路结构是一棵有 NN 个节点的树,每个节点表示一个城区。

最开始,整座城市都属于第一帮骑行者。某一天,第二帮骑行者出现了,并且每天都会占领一个原本属于第一帮骑行者的城区。

每天结束时,两个帮派的骑行者都会分别从自己控制的某个城区出发,前往自己控制的另一个城区,途中不能多次经过同一个城区。因为他们都非常“卷”,所以每天都想走尽可能远的路。

因此,在每天有一个城区被第二帮派占领之后,两个帮派都想知道:在自己当前控制的城区中,任选起点和终点,能走出的最大距离是多少。

注意:一天中先发生城区占领,然后再计算当天的最大距离。

题目要求

已知城市的树结构、天数 QQ,以及每一天被第二帮派占领的城区编号。请输出每一天结束后:

  1. 第一帮派所能选择的最大路径距离;
  2. 第二帮派所能选择的最大路径距离。

树上两个节点之间的距离定义为它们之间路径上的边数。

输入格式

第一行包含两个正整数 N,QN,Q,表示城区数和需要关注的天数。

接下来 N1N-1 行,每行包含两个整数 x,yx,y,表示 xxyy 之间有一条边。

接下来 QQ 行,每行包含一个整数 cc,表示当天被第二帮派占领的城区编号。

输出格式

包含 QQ 行。

ii 行输出两个整数,分别表示第 ii 天结束后,第一帮派和第二帮派能走出的最大距离。

数据范围与约定

  • 2N2000002 \le N \le 200000
  • 1QN1 \le Q \le N
  • 1x,y,cN1 \le x,y,c \le N
  • 每个城区最多只会被占领一次;
  • 如果某个帮派控制的城区数量少于 2,则该帮派的最大距离视为 0;
  • 骑行者可以经过不属于自己帮派的城区,但起点和终点必须属于自己帮派;
  • 对于 20% 的测试点,N1000N \le 1000
  • 其余 80% 的测试点,100000N200000100000 \le N \le 200000

样例

输入

10 6
1 2
2 3
2 8
3 4
3 5
1 6
6 7
6 9
1 10
3
6
4
5
10
9

输出

5 0
5 3
5 4
4 4
4 4
4 5