P11330 [NOISG 2022 Finals] Grapevine
题目描述
Syrup 有一个巨大的葡萄藤。这个葡萄藤上共有 $N$ 片叶子,用 $1 \sim N$ 编号;这些叶子之间有 $N-1$ 条藤连接。第 $i$ 条藤连接第 $A_i$ 和第 $B_i$ 片叶子,长度为 $W_i$。换句话说,这些叶子和藤组成了一棵树。没有两个葡萄藤的两端相同,且这些叶子之间都可以相互到达。
Syrup 精通养护葡萄藤。他可以向一个叶子 $j$ **浇水**,使得这里飞速生长。如果这片叶子上还没有葡萄,那么浇完水后会立刻长出;如果已经有葡萄了,那么这个葡萄会因为水分过多而消失。
他也可以选择一条树枝,并**改变它的长度**。因为这个葡萄藤实在太大了,所以他需要站在叶子上,并快速**找到**离它距离最近的一个葡萄。
现在,刚刚经历过暴风雨的葡萄藤上没有葡萄。在这一周内,Syrup 打算进行 $Q$ 次以上操作,他想让你帮他快速回答出他的问题。
输入格式
第一行,两个整数 $N,Q$;
接下来 $N-1$ 行,每行三个整数 $A_i,B_i,W_i$。
接下来 $Q$ 行,表示 $Q$ 个操作:
- `1 q`:现在 Syrup 站在编号为 $q$ 的叶子上,他想找到离它最近的葡萄,请你输出这个最小距离。
- `2 u`:向编号为 $u$ 的叶子浇水。
- `3 a b w`:将第 $a$ 片叶子和第 $b$ 片叶子之间的树枝长度改为 $w$。
输出格式
对于每个 `1` 操作,输出距离的最小值。如果当前没有任何一个葡萄,输出 `-1`。
说明/提示
**【数据范围】**
|$\text{Subtask}$|分值|特殊性质|
|:-:|:-:|:-:|
|$0$|$0$|样例|
|$1$|$6$|$N,Q\le2000$|
|$2$|$14$|对于所有查询操作,保证 $q=1$|
|$3$|$15$|整个葡萄藤是一颗完全二叉树,$A_i=\lfloor\frac{i+1}{2}\rfloor,B_i=i+1$|
|$4$|$15$|在任意时刻整个葡萄藤上都最多只有一个葡萄|
|$5$|$18$|所有 `2` 操作都在 `1` 和 `3` 操作之前,且对于所有 `3` 操作,$w=0$|
|$6$|$32$|无|
对于 $100\%$ 的数据,$2 \le N \le 100000,1 \le Q \le 100000,1 \le A_i \not = B_i \le N,0 \le W_i \le 10^9$。