P9665 [ICPC 2021 Macao R] Colorful Tree

题目描述

你的任务是维护一棵有色树并处理查询。 一开始,树上只有一个编号为 $1$ 的顶点,颜色为 $C$。然后按顺序进行 $q$ 个操作,有两种类型: - $0$ $x$ $c$ $d$:向树中添加一个颜色为 $c$ 的新顶点,其编号为 $(n+1)$,其中 $n$ 是当前存在的顶点数。同时,添加一条连接顶点 $x$ 和 $(n+1)$ 的长度为 $d$ 的边。 - $1$ $x$ $c$:将顶点 $x$ 的颜色更改为 $c$。 在每次操作之后,你应该找到当前树中颜色 $\textbf{不同}$ 的两个顶点 $u$ 和 $v$($1 \le u, v \le n$),使得它们之间的距离尽可能大。 两个顶点 $u$ 和 $v$ 之间的距离是树上从 $u$ 到 $v$ 的最短路径的长度。

输入格式

输入的第一行包含两个整数 $q$ 和 $C$($1 \le q \le 5 \times 10^5$,$1 \le C \le q$),表示操作的数量和顶点 $1$ 的初始颜色。 接下来的 $q$ 行中,每行描述一个按顺序进行的操作,包含 $3$ 或 $4$ 个整数。 - 如果第 $i$ 行包含 $4$ 个整数 $0$、$x_i$、$c_i$ 和 $d_i$($1 \le x_i \le n$,$1 \le c_i \le q$,$1 \le d \le 10^9$),则第 $i$ 个操作将向树中添加一个颜色为 $c_i$ 的新顶点 $(n + 1)$,并将其与顶点 $x_i$ 连接,边的长度为 $d_i$。 - 如果第 $i$ 行包含 $3$ 个整数 $1$、$x_i$ 和 $c_i$($1 \le x_i \le n$,$1 \le c_i \le q$),则第 $i$ 个操作将顶点 $x_i$ 的颜色更改为 $c_i$。 保证所有测试用例中 $q$ 的总和不超过 $5 \times 10^5$。

输出格式

对于每个操作,输出两个不同颜色顶点之间的最大距离。如果不存在有效的顶点对,则输出 $0$。 翻译来自于:[ChatGPT](https://chatgpt.com/)