#HK5255. 「NOISG 2022 Final」Grapevine

「NOISG 2022 Final」Grapevine

题目描述

译自 NOISG 2022 Final T4. Grapevine

乌龟西拉普在给环绕小镇的巨大葡萄藤浇水。葡萄藤的结构可以描述为有 NN 个叶状节点,编号从 11NN,由 N1N-1 条分支连接,分支编号也从 11N1N-1。每条分支 ii 直接连接两个节点 AiA_iBiB_i,长度为 WiW_i。没有两条分支直接连接相同的节点对,作为单一葡萄藤的一部分,每个节点通过分支直接或间接与其他节点相连。

凭借他坚固的水管和一些手工技巧,西拉普能够根据需要引导葡萄藤的生长。特别是,他可以浇灌一个节点,使其立即长出一颗大葡萄(如果该节点为空),或将已有的葡萄摘除(如果该节点已有葡萄)。

他还可以用水软化一条分支,通过以适当的压力和角度喷水,将其延长或缩短到新长度 wiw_i。为了确保一切顺利,西拉普会定期站在一个较高的节点上寻找最近的葡萄。从该节点到葡萄的距离定义为从该节点出发,穿过若干条分支(或无分支),到达葡萄所在节点的最短路径。

目前,葡萄藤在最近一次风暴后没有任何葡萄。西拉普计划了一周的 QQ 次浇水行动,即将开始喷水;但首先,他需要知道在寻找葡萄时预计的距离。给定西拉普的浇水计划,你的任务是为每次计划的寻找行动找出从指定节点到最近葡萄的距离。

输入格式

程序需从标准输入读取数据。

第一行包含两个整数 NNQQ

接下来的 N1N-1 行,第 ii 行包含三个整数 Ai,Bi,WiA_i, B_i, W_i,描述一条分支。

接下来的 QQ 行,每行表示西拉普的一次行动:

  • 若行的第一个整数为 11,表示寻找行动,后面跟着一个整数 qiq_i。这意味着需要确定节点 qiq_i 到最近的有葡萄的节点的距离,并输出该距离。若葡萄藤上没有葡萄,则输出 1-1
  • 若行的第一个整数为 22,表示浇灌行动,后面跟着一个整数 uiu_i。这意味着节点 uiu_i 被浇灌,长出一颗葡萄或摘除其现有葡萄。
  • 若行的第一个整数为 33,表示软化行动,后面跟着三个整数 ai,bi,wia_i, b_i, w_i。这意味着节点 aia_ibib_i 之间的分支长度变为 wiw_i。保证节点 aia_ibib_i 之间存在分支。

输出格式

程序需向标准输出输出结果。

对于每次寻找行动,输出一行,包含一个整数,表示到最近葡萄的距离;若没有葡萄,则输出 1-1

7 11
1 2 2
2 3 4
5 6 1
5 3 6
3 7 6
2 4 9
2 6
2 4
2 7
1 1
3 2 3 0
1 1
3 6 5 0
1 1
3 3 5 0
3 2 4 0
1 1

11
8
8
2

第一次寻找时,最近的葡萄在节点 44,路径为 1241 \to 2 \to 4,距离为 2+9=112 + 9 = 11

第二次寻找时,最近的葡萄在节点 77

第三次寻找时,节点 6677 的葡萄距离最近。

第四次也是最后一次寻找时,最近的葡萄在节点 44

这个样例满足子任务 1,2,5,61, 2, 5, 6 的限制。

6 11
1 2 3
1 3 4
2 4 1
2 5 4
3 6 6
2 3
1 2
2 4
3 1 3 2
1 1
2 3
3 2 1 2
2 4
1 3
2 2
1 3

7
2
-1
4

这个样例满足子任务 1,3,61, 3, 6 的限制。

7 8
1 2 2
2 3 3
3 6 2
4 6 1
5 6 4
6 7 3
2 3
1 4
2 3
2 5
1 1
3 6 7 4
1 5
1 7

3
11
0
8

这个样例满足子任务 1,4,61, 4, 6 的限制。

数据范围与提示

对于所有输入数据,满足:

  • 2N1000002 \leq N \leq 100000
  • 1Q1000001 \leq Q \leq 100000
  • 1AiBiN1 \leq A_i \neq B_i \leq N
  • 0Wi1090 \leq W_i \leq 10^9

详细子任务附加限制及分值如下表所示:

子任务 分值 附加限制
11 66 N,Q2000N, Q \leq 2000
22 1414 对于所有寻找行动,qi=1q_i = 1
33 1515 葡萄藤形成完全二叉树,Ai=i+12,Bi=i+1A_i = \lfloor \frac{i+1}{2} \rfloor, B_i = i+1
44 1515 葡萄藤上任意时刻最多有 11 颗葡萄
55 1818 所有浇灌行动在任何寻找或软化行动之前发生;对于所有软化行动,wi=0w_i = 0
66 3232 无附加限制