#P3384. 重链剖分 / 树链剖分
重链剖分 / 树链剖分
重链剖分 / 树链剖分
题目描述
给定一棵包含 个结点的树,每个结点有一个非负整数权值。指定结点 为根。你需要支持以下四种操作:
1 x y z:把结点 到结点 的最短路径上所有结点的权值都加上 ;2 x y:求结点 到结点 的最短路径上所有结点的权值之和;3 x z:把以结点 为根的子树内所有结点的权值都加上 ;4 x:求以结点 为根的子树内所有结点的权值之和。
所有查询结果均对 取模。
输入格式
第一行输入四个正整数 ,分别表示结点数、操作数、根结点编号和模数。
第二行输入 个非负整数,表示各结点的初始权值。
接下来 行,每行输入两个整数 ,表示结点 之间有一条边。
接下来 行,每行输入一个操作,格式见题目描述。
输出格式
对每个操作 2 或操作 4 输出一行,表示相应查询结果对 取模后的值。
样例输入 1
5 5 2 24
7 3 7 8 0
1 2
1 5
3 1
4 1
3 4 2
3 2 2
4 5
1 5 1 3
2 1 3
样例输出 1
2
21
数据范围
- ;
- ;
- ;
- 所有输入整数均在
int范围内。
| 子任务编号 | 分值 | 特殊限制 |
|---|---|---|
| 1 | 25 | , |
| 2 | ,且树为链 | |
| 3 | 只包含操作 3 和操作 4 |
|
| 4 | 无特殊限制 |
样例说明
树的结构如下:

各次操作如下:

因此依次输出 和 。