#HK5255. 「NOISG 2022 Final」Grapevine
「NOISG 2022 Final」Grapevine
题目描述
译自 NOISG 2022 Final T4. Grapevine
乌龟西拉普在给环绕小镇的巨大葡萄藤浇水。葡萄藤的结构可以描述为有 个叶状节点,编号从 到 ,由 条分支连接,分支编号也从 到 。每条分支 直接连接两个节点 和 ,长度为 。没有两条分支直接连接相同的节点对,作为单一葡萄藤的一部分,每个节点通过分支直接或间接与其他节点相连。
凭借他坚固的水管和一些手工技巧,西拉普能够根据需要引导葡萄藤的生长。特别是,他可以浇灌一个节点,使其立即长出一颗大葡萄(如果该节点为空),或将已有的葡萄摘除(如果该节点已有葡萄)。
他还可以用水软化一条分支,通过以适当的压力和角度喷水,将其延长或缩短到新长度 。为了确保一切顺利,西拉普会定期站在一个较高的节点上寻找最近的葡萄。从该节点到葡萄的距离定义为从该节点出发,穿过若干条分支(或无分支),到达葡萄所在节点的最短路径。
目前,葡萄藤在最近一次风暴后没有任何葡萄。西拉普计划了一周的 次浇水行动,即将开始喷水;但首先,他需要知道在寻找葡萄时预计的距离。给定西拉普的浇水计划,你的任务是为每次计划的寻找行动找出从指定节点到最近葡萄的距离。
输入格式
程序需从标准输入读取数据。
第一行包含两个整数 和 。
接下来的 行,第 行包含三个整数 ,描述一条分支。
接下来的 行,每行表示西拉普的一次行动:
- 若行的第一个整数为 ,表示寻找行动,后面跟着一个整数 。这意味着需要确定节点 到最近的有葡萄的节点的距离,并输出该距离。若葡萄藤上没有葡萄,则输出 。
- 若行的第一个整数为 ,表示浇灌行动,后面跟着一个整数 。这意味着节点 被浇灌,长出一颗葡萄或摘除其现有葡萄。
- 若行的第一个整数为 ,表示软化行动,后面跟着三个整数 。这意味着节点 和 之间的分支长度变为 。保证节点 和 之间存在分支。
输出格式
程序需向标准输出输出结果。
对于每次寻找行动,输出一行,包含一个整数,表示到最近葡萄的距离;若没有葡萄,则输出 。
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
第一次寻找时,最近的葡萄在节点 ,路径为 ,距离为 。
第二次寻找时,最近的葡萄在节点 。
第三次寻找时,节点 和 的葡萄距离最近。
第四次也是最后一次寻找时,最近的葡萄在节点 。
这个样例满足子任务 的限制。
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
这个样例满足子任务 的限制。
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
这个样例满足子任务 的限制。
数据范围与提示
对于所有输入数据,满足:
详细子任务附加限制及分值如下表所示:
| 子任务 | 分值 | 附加限制 |
|---|---|---|
| 对于所有寻找行动, | ||
| 葡萄藤形成完全二叉树, | ||
| 葡萄藤上任意时刻最多有 颗葡萄 | ||
| 所有浇灌行动在任何寻找或软化行动之前发生;对于所有软化行动, | ||
| 无附加限制 |