QOJ.ac

QOJ

Limite de temps : 3 s Limite de mémoire : 1024 MB Points totaux : 100

#3874. 葡萄藤

Statistiques

乌龟 Syrup 正在照料镇上蜿蜒盘绕的巨大葡萄藤(Grapevine)。葡萄藤的布局可以描述为拥有 $N$ 个叶状节点,Syrup 将其编号为 $1$ 到 $N$,并由 $N-1$ 条同样编号为 $1$ 到 $N-1$ 的分支连接。每条分支 $i$ 直接连接两个节点 $A_i$ 和 $B_i$,长度为 $W_i$。任意两个节点之间不存在多条直接连接的分支,且作为单一葡萄藤的一部分,每个节点都可以通过分支直接或间接地连接到其他所有节点。

凭借他坚固的水管和一点手工活,Syrup 可以随心所欲地改变葡萄藤的生长。具体来说,他可以浸泡(soak)藤蔓上的一个节点——如果该节点为空,它会立即长出一颗巨大的葡萄;如果该节点已经有葡萄,则会将葡萄移除。

他还可以用水退火(anneal)一条分支,通过以合适的压力和角度喷水,将其延长或缩短至新的长度 $w_i$。为了确保一切按计划进行,Syrup 会定期站在一个高处的节点上,寻找(seek)距离最近的葡萄。从这样一个节点到葡萄的距离定义为从该节点出发,经过若干条分支(或不经过分支),到达葡萄所在节点的最短路径长度。

目前,在经历上次风暴后,葡萄藤上没有任何葡萄。Syrup 已经为本周规划了 $Q$ 个浇水动作,并准备开始喷水;但首先,他需要知道在寻找葡萄的过程中会遇到什么样的距离。给定 Syrup 的浇水计划,你的任务是针对每次计划的寻找操作,找出从指定节点到最近葡萄的距离。

输入格式

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

第一行包含两个整数 $N$ 和 $Q$。

接下来 $N-1$ 行,第 $i$ 行包含三个整数 $A_i, B_i$ 和 $W_i$,描述一条分支。

接下来 $Q$ 行,每行代表 Syrup 的一个动作。

  • 如果该行第一个整数为 $1$,则代表一次寻找(seek)操作,随后跟一个整数 $q_i$。这意味着你需要确定节点 $q_i$ 与最近的葡萄所在节点之间的距离,并输出该距离。如果葡萄藤上没有葡萄,则输出 $-1$。
  • 如果该行第一个整数为 $2$,则代表一次浸泡(soak)操作,随后跟一个整数 $u_i$。这意味着节点 $u_i$ 被浸泡,长出一颗葡萄或其上的葡萄被移除。
  • 如果该行第一个整数为 $3$,则代表一次退火(anneal)操作,随后跟三个整数 $a_i, b_i$ 和 $w_i$。这意味着节点 $a_i$ 和 $b_i$ 之间的分支长度被更改为 $w_i$。保证节点 $a_i$ 和 $b_i$ 之间存在一条分支。

输出格式

程序必须打印到标准输出。

对于每次寻找操作,输出一行,包含一个整数,即到最近葡萄的距离;如果不存在葡萄,则输出 $-1$。

数据范围

最大执行时间为 3.0 秒。对于所有测试用例,输入满足以下限制:

  • $2 \le N \le 100\,000$
  • $1 \le Q \le 100\,000$
  • $1 \le A_i \neq B_i \le N$
  • $0 \le W_i \le 10^9$

你的程序将在满足以下限制的输入实例上进行测试:

子任务 分值 附加限制
1 6 $N, Q \le 2000$
2 14 对于所有寻找操作,$q_i = 1$
3 15 藤蔓构成一棵完全二叉树,$A_i = \lfloor \frac{i+1}{2} \rfloor, B_i = i + 1$
4 15 任意时刻藤蔓上最多只有 1 颗葡萄
5 18 所有浸泡操作均在任何寻找或退火操作之前发生。对于所有退火操作,$w_i = 0$
6 32 -

样例

输入格式 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

输出格式 1

11
8
8
2

说明 1

在第一次寻找中,最近的葡萄位于节点 4,路径为 $1 \to 2 \to 4$,距离为 $2 + 9 = 11$。第二次寻找中,最近的葡萄位于节点 7;第三次寻找中,节点 6 和 7 上的葡萄距离相等且最近。第四次(最后一次)寻找中,最近的葡萄位于节点 4。

输入格式 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

输出格式 2

7
2
-1
4

输入格式 3

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

3
11
0
8

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.