P13805 [CERC 2022] Bandits
题目描述
有一个王国,包含 $N$ 个村庄和 $N - 1$ 条双向道路。公民可以通过这些道路沿路径(由一条或多条道路组成)在任意两个村庄之间往来。第 $i$ 条道路连接村庄 $A_i$ 与 $B_i$,长度为 $C_i$。
国王注意到,关于土匪袭击在道路上行商的商人的投诉越来越多。他命令顾问解决这一问题,方法是雇佣忠诚的打手团伙,充当安保机构。每一份安保合同保证从总部所在村庄 $X_j$ 出发,半径 $R_j$ 内的所有道路得到保护。一条道路会被视为受该合同保护,当且仅当它属于从 $X_j$ 出发、长度不超过 $R_j$ 的某条路径的一部分。某些道路可能被多份合同保护,因此会更加安全。
请编写程序,处理关于新合同的查询,并回答针对特定道路的安全性查询,即输出当前保护该道路的合同数量。
输入格式
第一行包含一个整数 $N$,表示村庄的数量。接下来的 $N - 1$ 行描述这些道路。每行包含三个整数 $A_i, B_i, C_i$,表示一条连接村庄 $A_i$ 与 $B_i$ 的道路,其长度为 $C_i$。村庄编号为 $1 \sim N$。
下一行包含一个整数 $Q$,表示查询数量。接下来的 $Q$ 行依次描述这些查询。
- 表示新安保合同的查询以字符 `'+'` 开头,随后给出总部村庄 $X_j$ 与安全半径 $R_j$。
- 表示道路安全性的查询以字符 `'?'` 开头,随后给出道路编号 $Y_j$。道路编号为 $1 \sim N - 1$,编号顺序即为输入时的顺序。
输出格式
按照给定顺序处理查询。对于每一个 `'?'` 类型的查询,输出一行,包含当前保护道路 $Y_j$ 的合同数量。
说明/提示
### 输入限制
* $1 \leq N, Q \leq 10^5$
* $0 \leq C_i, R_j \leq 10^9$
---
翻译由 ChatGPT-5 完成