题目 30235

动态树子树加子树求和

查看题解 ↗GitHub ↗如何评测
题号
30235
时间限制
10000 ms
内存限制
1024 MB
标签
树图论
来源
Library Checker (yosupo06) - dynamic_tree_subtree_add_subtree_sum

【题目描述】

给定一棵有 NN 个顶点的树。第 ii 条边连接顶点 uiu_i 与顶点 viv_i。顶点 ii 上写有一个数 aia_i。

依次处理 QQ 个如下类型的查询:

  • 0 $u$ $v$ $w$ $x$:删除边 (u,v)(u, v),并添加一条新边 (w,x)(w, x)。保证处理之后该图仍然是一棵树。
  • 1 $v$ $p$ $x$:以边 (v,p)(v, p) 为参照,把 pp 看作父亲,给顶点 vv 的子树中所有顶点的值加上 xx。
  • 2 $v$ $p$:以边 (v,p)(v, p) 为参照,把 pp 看作父亲,求顶点 vv 的子树中所有顶点的值之和。

【输入】

文本
$N$ $Q$
$a_0$ $a_1$ ... $a_{N - 1}$
$u_0$ $v_0$
$u_1$ $v_1$
$\hspace{11pt} \vdots$
$u_{N - 2}$ $v_{N - 2}$
$\mathrm{Query}_0$
$\mathrm{Query}_1$
$\hspace{14pt} \vdots$
$\mathrm{Query}_{Q - 1}$

【输出】

对每个 2 $v$ $p$ 类型的查询,输出一行一个整数,表示所求的和。

【输入样例】

文本
5 7
1 10 100 1000 10000
0 1
1 2
2 3
1 4
2 1 0
1 1 4 100000
2 2 3
0 1 2 2 0
2 0 2
0 2 3 3 1
2 1 4

【输出样例】

文本
11110
310111
210011
401111

【数据范围】

  • 2≤N≤2000002 \le N \le 200000
  • 1≤Q≤2000001 \le Q \le 200000
  • 0≤ai≤100000000 \le a_i \le 10000000
  • 0≤ui,vi<N0 \le u_i, v_i < N
  • 该图是一棵树
  • 对于 0 $u$ $v$ $w$ $x$ 类型的查询:
    • 0≤u,v,w,x<N0 \le u, v, w, x \lt N
    • 处理该类型的查询时,边 (u,v)(u, v) 存在
    • 处理之后该图仍然是一棵树
  • 对于 1 $v$ $p$ $x$ 类型的查询:
    • 0≤v,p<N0 \le v, p \lt N
    • 0≤x≤100000000 \le x \le 10000000
    • 处理该类型的查询时,边 (v,p)(v, p) 存在
  • 对于 2 $v$ $p$ 类型的查询:
    • 0≤v,p<N0 \le v, p \lt N
    • 处理该类型的查询时,边 (v,p)(v, p) 存在

【来源】

Library Checker(yosupo06) dynamic_tree_subtree_add_subtree_sum

数据下载

题目 30235 的公开数据

正在读取文件列表…

常用命令

题目 30235 的 ROJ 命令

以下命令默认使用全局安装的 ROJ Skill,请在终端中直接执行;如果修改过 AGENT_HOME,请将命令中的 ~/.agents 替换为对应目录。