这是一道模板题。
给定一棵 个节点的树,初始时该树的根为 号节点,每个节点有一个给定的权值。下面依次进行 个操作,操作分为如下五种类型:
换根:将一个指定的节点设置为树的新根。
修改路径权值:给定两个节点,将这两个节点间路径上的所有节点权值(含这两个节点)增加一个给定的值。
修改子树权值:给定一个节点,将以该节点为根的子树内的所有节点权值增加一个给定的值。
询问路径:询问某条路径上节点的权值和。
询问子树:询问某个子树内节点的权值和。
第一行一个整数 ,表示节点的个数。
第二行 个整数表示第 个节点的初始权值 。
第三行 个整数,表示 号节点的父节点编号 。
第四行一个整数 ,表示操作个数。
接下来 行,每行第一个整数表示操作类型编号:
若类型为 ,则接下来一个整数 ,表示新根的编号。
若类型为 ,则接下来三个整数 ,分别表示路径两端的节点编号以及增加的权值。
若类型为 ,则接下来两个整数 ,分别表示子树根节点编号以及增加的权值。
若类型为 ,则接下来两个整数 ,表示路径两端的节点编号。
若类型为 ,则接下来一个整数 ,表示子树根节点编号。
对于每一个类型为 或 的操作,输出一行一个整数表示答案。
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
对于 的数据,。数据有一定梯度。