#P9665. [ICPC 2021 Macao R] Colorful Tree

[ICPC 2021 Macao R] Colorful Tree

Description

你的任务是维护一棵有色树并处理查询。

一开始,树上只有一个编号为 11 的顶点,颜色为 CC。然后按顺序进行 qq 个操作,有两种类型:

  • 00 xx cc dd:向树中添加一个颜色为 cc 的新顶点,其编号为 (n+1)(n+1),其中 nn 是当前存在的顶点数。同时,添加一条连接顶点 xx(n+1)(n+1) 的长度为 dd 的边。
  • 11 xx cc:将顶点 xx 的颜色更改为 cc

在每次操作之后,你应该找到当前树中颜色 不同\textbf{不同} 的两个顶点 uuvv1u,vn1 \le u, v \le n),使得它们之间的距离尽可能大。

两个顶点 uuvv 之间的距离是树上从 uuvv 的最短路径的长度。

Input Format

存在多个测试用例。输入的第一行包含一个整数 TT ,表示测试用例的数量。对于每个测试用例:

输入的第一行包含两个整数 qqCC1q5×1051 \le q \le 5 \times 10^51Cq1 \le C \le q),表示操作的数量和顶点 11 的初始颜色。

接下来的 qq 行中,每行描述一个按顺序进行的操作,包含 3344 个整数。

  • 如果第 ii 行包含 44 个整数 00xix_icic_idid_i1xin1 \le x_i \le n1ciq1 \le c_i \le q1d1091 \le d \le 10^9),则第 ii 个操作将向树中添加一个颜色为 cic_i 的新顶点 (n+1)(n + 1),并将其与顶点 xix_i 连接,边的长度为 did_i
  • 如果第 ii 行包含 33 个整数 11xix_icic_i1xin1 \le x_i \le n1ciq1 \le c_i \le q),则第 ii 个操作将顶点 xix_i 的颜色更改为 cic_i

保证所有测试用例中 qq 的总和不超过 5×1055 \times 10^5

Output Format

对于每个操作,输出两个不同颜色顶点之间的最大距离。如果不存在有效的顶点对,则输出 00

翻译来自于:ChatGPT

2
1 1
0 1 1 1
5 1
0 1 1 1
0 1 2 1
0 3 3 1
1 4 1
1 3 1
0
0
2
3
2
0