Q. 【模板】树链剖分2

    Type: Default 1000ms 256MiB

【模板】树链剖分2

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

题目描述

这是一道模板题。

给定一棵 nn 个节点的树,初始时该树的根为 11 号节点,每个节点有一个给定的权值。下面依次进行 mm 个操作,操作分为如下五种类型:

  • 换根:将一个指定的节点设置为树的新根。

  • 修改路径权值:给定两个节点,将这两个节点间路径上的所有节点权值(含这两个节点)增加一个给定的值。

  • 修改子树权值:给定一个节点,将以该节点为根的子树内的所有节点权值增加一个给定的值。

  • 询问路径:询问某条路径上节点的权值和。

  • 询问子树:询问某个子树内节点的权值和。

输入格式

第一行一个整数 nn,表示节点的个数。

第二行 nn 个整数表示第 ii 个节点的初始权值 aia_i

第三行 n1n-1 个整数,表示 i+1i+1 号节点的父节点编号 fi+1 (1fi+1n)f_{i+1}\ (1 \leqslant f_{i+1} \leqslant n)

第四行一个整数 mm,表示操作个数。

接下来 mm 行,每行第一个整数表示操作类型编号:(1u,vn)(1 \leqslant u, v \leqslant n)

  • 若类型为 11,则接下来一个整数 uu,表示新根的编号。

  • 若类型为 22,则接下来三个整数 u,v,ku,v,k,分别表示路径两端的节点编号以及增加的权值。

  • 若类型为 33,则接下来两个整数 u,ku,k,分别表示子树根节点编号以及增加的权值。

  • 若类型为 44,则接下来两个整数 u,vu,v,表示路径两端的节点编号。

  • 若类型为 55,则接下来一个整数 uu,表示子树根节点编号。

输出格式

对于每一个类型为 4455 的操作,输出一行一个整数表示答案。

6
1 2 3 4 5 6
1 2 1 4 4
6
4 5 6
2 2 4 1
5 1
1 4
3 1 2
4 2 5
15
24
19

提示

对于 100%100\% 的数据,$1\leqslant n,m\leqslant 10^5,0\leqslant a_i,k\leqslant 10^5$。数据有一定梯度。

线段树及其变形

Not Claimed
Status
Done
Problem
32
Open Since
2025-10-10 0:00
Deadline
2025-12-31 23:59
Extension
24 hour(s)