#P15472. 星港集结
星港集结
一座星港由 个停靠点和 条双向通道组成,任意两个停靠点之间都能互相到达,且每条通道长度均为 。也就是说,星港结构是一棵树。
某些停靠点上停有探测员。现在星港将在停靠点 启动集结程序,并在停靠点 设置一次记录终端。
接下来的 秒内,所有探测员会按照统一规则向停靠点 集结。具体地,第 秒时,所有当前距离停靠点 恰好为 的探测员,会沿着通往 的最短路径向前移动一步。第 秒时,所有探测员仍在自己的初始停靠点。
若两个不同的探测员 在第 秒第一次相遇,即它们在第 秒位于同一个停靠点,而在第 秒不位于同一个停靠点,设它们此时所在的停靠点编号为 ,则探测员 与探测员 都会各自获得 点记录值。
对于某个探测员 ,设 是 中最大的一个时刻,使得第 秒时 位于记录终端 。那么在第 秒, 会在终端 进行记录,并将其当时拥有的记录值计入总记录值。若不存在这样的时刻 ,则该探测员不会对总记录值产生贡献。
现在你需要在每次操作后,输出经过上述 秒集结过程后得到的总记录值。
共有 次操作。每次给出三个整数 :若停靠点 当前有探测员,则该探测员离开星港;否则,停靠点 会新来一名探测员。随后,你需要回答:若本次在停靠点 启动集结程序,并在停靠点 设置记录终端,最终总记录值是多少。
注意:集结过程只用于计算答案,探测员并不会真的在树上永久移动;但每次操作中的进入或离开会真实改变之后的探测员集合。
输入格式
第一行两个整数 。
接下来 行,每行两个整数 ,表示停靠点 与 之间有一条通道。
接下来 行,每行三个整数 ,表示一次操作与询问。
输出格式
输出共 行,每行一个整数,表示对应询问的答案。
样例 1 输入
5 5
1 2
1 3
2 4
2 5
4 1 1
5 1 1
3 1 1
2 3 2
1 3 1
样例 1 输出
0
2
4
6
9
样例 1 解释
对于最后一次询问,停靠点 上均有探测员,集结点为 ,记录终端为 。下面用 表示第 秒位于停靠点 的探测员,用 表示该探测员当前记录值。
第 秒时,没有探测员移动。
第 秒时,探测员 移动到停靠点 。此时探测员 两两第一次相遇,因此 。
第 秒时,探测员 移动到停靠点 ,此时 。
第 秒时,探测员 移动到停靠点 ,此时 ,集结完成。
其中探测员 都曾到达记录终端 ,且最后一次到达记录终端的时刻均为第 秒,因此总记录值为 ,输出 。
样例 2 输入
7 8
1 2
1 3
2 4
2 5
3 6
6 7
2 1 1
3 1 1
4 1 1
1 1 4
5 1 4
1 4 7
7 4 4
1 5 1
样例 2 输出
0
1
4
0
0
0
29
5
样例 3
见选手目录下 celebration/ex_celebration3.in 和 celebration/ex_celebration3.out。
样例 4
见选手目录下 celebration/ex_celebration4.in 和 celebration/ex_celebration4.out。
该样例满足特殊性质 B。
样例 5
见选手目录下 celebration/ex_celebration5.in 和 celebration/ex_celebration5.out。
该样例满足特殊性质 C。
数据范围
$1\leq n\leq 5\times 10^4,1\leq q\leq 10^5,1\leq x_i,y_i,u_i,r_i,v_i\leq n$。
| 子任务编号 | 限制 | 特殊性质 | 分值 |
|---|---|---|---|
| A | |||
| B | |||
| C | |||
| 无 |
特殊性质 A:。
特殊性质 B:。
特殊性质 C:。