题目名称 3601. [模板]树上操作B
输入输出 tree.in/out
难度等级 ★★★
时间限制 1000 ms (1 s)
内存限制 512 MiB
测试数据 10
题目来源 Gravatarsyzhaoss 于2026-04-24加入
开放分组 全部用户
提交状态
分类标签
DFS序 树状数组 线段树
分享题解
通过:1, 提交:1, 通过率:100%
Gravatarsyzhaoss 100 1.357 s 10.21 MiB C++
关于 树上操作B 的近10条评论(全部评论)

3601. [模板]树上操作B

★★★   输入文件:tree.in   输出文件:tree.out   简单对比
时间限制:1 s   内存限制:512 MiB

【题目描述】

给定一棵有$n$个结点的有根树,树根编号为$1$,初始时每个结点都有一个权值,你需要实现如下操作:

C x y,将以结点$x$为根的子树的结点的权值增加$y$;

Q x,查询以$x$为根的子树的结点权值之和。

【输入格式】

一行两个整数$n,m$,表示树结点数和操作数。

接下来一行$n$个整数,表示结点初始状态下的权值。

接下来$n-1$行,每行两个整数$x,y$,表示$x,y$之间有一条边。

接下来$m$行,每行一个操作。

【输出格式】

对于每个查询操作,输出以$x$为根的子树的结点权值之和对$10^9+7$取余的结果。

【样例输入】

5 5
2 3 7 5 1
1 2
1 3
2 4
2 5
Q 2
C 4 6
Q 2
C 2 3
Q 1

【样例输出】

9
15
33

【数据规模与约定】

对于$60\%$的数据,$1\leq n,m\leq 10^4$。

对于$100\%$的数据,$1\leq n, m\leq 2\times 10^5$,保证所有输入的权值在$[0,2^{31}-1]$。