#abc294g. [abc294_g]Distance Queries on a Tree

[abc294_g]Distance Queries on a Tree

问题描述

给定一棵有 NN 个顶点的树 TT。边 ii (1iN1)(1 \leq i \leq N-1) 连接顶点 uiu_iviv_i,并具有权重 wiw_i

按顺序处理 QQ 个查询。查询有两种类型,如下所示。

  • 1 i w:将边 ii 的权重更改为 ww
  • 2 u v:打印顶点 uu 和顶点 vv 之间的距离。

这里,一棵树上两个顶点 uuvv 之间的距离是连接它们的路径上所有边的权重之和的最小值。

约束条件

  • 1N2×1051 \leq N \leq 2 \times 10^5
  • 1ui,viN1 \leq u_i, v_i \leq N (1iN1)(1 \leq i \leq N-1)
  • 1wi1091 \leq w_i \leq 10^9 (1iN1)(1 \leq i \leq N-1)
  • 给定图是一棵树。
  • 1Q2×1051 \leq Q \leq 2 \times 10^5
  • 对于每个第一类查询,
    • 1iN11 \leq i \leq N-1,且
    • 1w1091 \leq w \leq 10^9
  • 对于每个第二类查询,
    • 1u,vN1 \leq u, v \leq N
  • 至少有一个第二类查询。
  • 输入中的所有值都是整数。

输入

输入以以下格式从标准输入给出:

NN u1u_1 v1v_1 w1w_1 u2u_2 v2v_2 w2w_2 \vdots uN1u_{N-1} vN1v_{N-1} wN1w_{N-1} QQ query1query_1 query2query_2 \vdots queryQquery_Q

这里,queryiquery_i 表示第 ii 个查询,并且有以下一种格式之一:

11 ii ww 22 uu vv

输出

打印 qq 行,其中 qq 是第二类查询的数量。第 jj(1jq)(1 \leq j \leq q) 应包含第 jj 个第二类查询的答案。

示例输入 1

5
1 2 3
1 3 6
1 4 9
4 5 10
4
2 2 3
2 1 5
1 3 1
2 1 5

示例输出 1

9
19
11

初始树如下图所示。

应按以下方式处理每个查询。

  • 第一个查询要求你打印顶点 22 和顶点 33 之间的距离。依次经过边 11 和边 22 的路径构成了它们之间的一条路径,总权重为 99,是最小值,因此应打印 99
  • 第二个查询要求你打印顶点 11 和顶点 55 之间的距离。依次经过边 33 和边 44 的路径构成了它们之间的一条路径,总权重为 1919,是最小值,因此应打印 1919
  • 第三个查询将边 33 的权重更改为 11
  • 第四个查询要求你打印顶点 11 和顶点 55 之间的距离。依次经过边 33 和边 44 的路径构成了它们之间的一条路径,总权重为 1111,是最小值,因此应打印 1111

示例输入 2

7
1 2 1000000000
2 3 1000000000
3 4 1000000000
4 5 1000000000
5 6 1000000000
6 7 1000000000
3
2 1 6
1 1 294967296
2 1 6

示例输出 2

5000000000
4294967296

注意,答案可能不适合 3232 位整数。

示例输入 3

1
1
2 1 1

示例输出 3

0

示例输入 4

8
1 2 105
1 3 103
2 4 105
2 5 100
5 6 101
3 7 106
3 8 100
18
2 2 8
2 3 6
1 4 108
2 3 4
2 3 5
2 5 5
2 3 1
2 4 3
1 1 107
2 3 1
2 7 6
2 3 8
2 1 5
2 7 6
2 4 7
2 1 7
2 5 3
2 8 6

示例输出 4

308
409
313
316
0
103
313
103
525
100
215
525
421
209
318
519