P9295 [POI 2020/2021 R1] Gang Biciaków / 布茨帮

题目背景

**题目译自 [XXVIII Olimpiada Informatyczna – I etap](https://sio2.mimuw.edu.pl/c/oi28-1/dashboard/) [Gang Biciaków](https://sio2.mimuw.edu.pl/c/oi28-1/p/gan/)。**

题目描述

Bajtazar 在一家货运公司工作,他目前的工作是将建筑材料从 Bajtocji 的首都运输到附近城镇的商店。在 Bajtocji,有 $n$ 座城市(编号从 $1$ 到 $n$),这些城市通过 $n-1$ 条道路相互连接。每条道路上都有一个加油站。 Bajtazar 一天的工作是这样的:他从首都(编号为 $1$ 的城市)出发,沿着最短路径到达城市 $x$,再原路返回。 Bajtazara 的儿子 Bitek 非常喜欢加油站里卖的玩具狗。玩具狗一共有 $m$ 种(编号从 $1$ 到 $m$),但每个加油站只提供一种玩具狗,因此收集玩具狗并非一件轻松的事情。 现在给出 Bajtazara 每天前往的目的地,他想要知道他的儿子这天能够获得多少种玩具狗。麻烦的是,每个加油站里售卖的玩具狗的种类会发生变化,你能帮助他解决这个难题吗?

输入格式

输入第一行三个整数 $n,m,z$,分别代表 Bajtocji 的城市数,玩具狗的种类数,查询的次数。 接下来 $n-1$ 行,第 $i$ 行三个整数 $a_i,b_i,c_i$,代表第 $i$ 条道路连接城市 $a_i$ 和城市 $b_i$($1 \leq a_i,b_i \leq n$),该道路上的加油站售卖的玩具狗种类为 $c_i$($1 \leq c_i \leq m$)。 接下来 $z$ 行,每行描述一个询问或修改操作,格式如下: - 询问操作:$\texttt{Z}\ x$ 表示 Bajtazara 想要知道,从首都出发到城市 $x$($2 \leq x \leq n$),能收集到多少种玩具狗。 - 修改操作:$\texttt{B}\ i\ c$ 表示将第 $i$ 条道路上加油站售卖的玩具狗的类型改为 $c$($1 \leq c \leq m$,注意如果该加油站本来就售卖 $c$ 类型玩具狗,执行该操作后将不会有任何影响)。

输出格式

对于每个 $\texttt{Z}$ 操作,输出一行一个整数,代表这一天 Bajtazara 的儿子能获得的玩具狗的种类数。

说明/提示

【样例解释1】: ![pp5XLWV.png](https://s1.ax1x.com/2023/04/05/pp5XLWV.png) 注意该样例中存在一次修改操作,使得第二条道路上的加油站售卖的玩具狗的种类从 $2$ 变成了 $1$。 【数据范围】: 所有测试点均满足:$2 \leq n \leq 10^5$,$1 \leq m,z \leq 1.5 \times 10^5$,且至少存在一个 $\texttt{Z}$ 操作。 | 子任务编号 | 约束| 分值| |:-:|:-:| :-: | | $1$| $n,m,z \leq 100$| $7$ | | $2$| $n,z \leq 2 \times 10^3$| $9$ | |$3$ | 只有 $\texttt{Z}$ 类型操作| $9 $ | | $4$| $m \leq 15$|$15$| |$5$|道路 $i$ 连接城市 $i$ 和城市 $i+1$| $11$ | | $6$ | 刚开始时,每个加油站售卖的玩具狗类型都是 $1$,在后续的 $\texttt{B}$ 类型操作中,玩具狗的类型会被更改为除 $1$ 之外的任意类型 | $13$ | | $7$| 无附加约束| $36$ |