CF757G Can Bash Save the Day?

题目描述

哇!你帮了火箭队的大忙,他们成功地捕获了 Bash 派出的所有宝可梦。Meowth 作为火箭队的一员,已经精通了人类语言,现在还想成为编程大师。他同意只要 Bash 能回答他的问题,就释放这些宝可梦。 最初,Meowth 给 Bash 一棵有 $n$ 个结点的加权树,以及一个长度为 $n$ 的序列 $a_1,a_2,...,a_n$,其中 $a$ 是 $1,2,...,n$ 的一个排列。之后,Meowth 进行 $q$ 个操作,每次操作为以下两种之一: - 1 l r v:让 Bash 汇报如下结果: $$ \sum_{i=l}^{r} dist(a_i, v) $$ 其中 $dist(a,b)$ 表示在给定树上从结点 $a$ 到结点 $b$ 的最短路径长度。 - 2 x:让 Bash 交换序列 $a$ 中位置 $x$ 和 $x+1$ 的元素。之后的所有查询都使用更新后的序列。 请你帮助 Bash 回答这些问题!

输入格式

第一行包含两个整数 $n$ 和 $q$($1\leq n\leq 2\times 10^5$,$1\leq q\leq 2\times 10^5$),分别表示树中结点的数量和操作数。 第二行包含 $n$ 个用空格分隔的整数,表示序列 $a_1,a_2,...,a_n$,是 $1,2,...,n$ 的一个排列。 接下来的 $n-1$ 行,每行包含三个用空格分隔的整数 $u$、$v$ 和 $w$,表示存在一条权值为 $w$ 的无向边,连接 $u$ 号点和 $v$ 号点($1\leq u,v\leq n$,$u\ne v$,$1\leq w\leq 10^6$)。保证给定的图是一棵树。 每个操作包含两行。 第一行是一个整数 $t$,表示操作的类型。 第二行描述本次操作: - 如果 $t=1$,第二行包含三个整数 $a$,$b$ 和 $c$($1\leq a,b,c

输出格式

对于每一个 $1$ 型操作,输出一行一个整数,表示查询的答案。

说明/提示

样例中实际的操作如下: - 1 1 5 4 - 1 1 3 3 - 2 3 - 2 2 - 1 1 3 3 由 ChatGPT 5 翻译