求和
题号:NC204871
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

已知有  个节点,有  条边,形成一个树的结构。

给定一个根节点 ,每个节点都有一个权值,节点i的权值为

给  个操作,操作有两种类型:

1 a x :表示将节点  的权值加上 

2 a :表示求  节点的子树上所有节点的和(包括  节点本身)

输入描述:

第一行给出三个正整数 ,表示树的节点数、操作次数、和这棵树的根节点.

第二行给出  个正整数,第  个正整数表示第  个节点的权值 

下面  行每行两个正整数 ,表示边的两个端点

接下来  行,每行给出一个操作

输出描述:

对于每个类型为 2 的操作,输出一行一个正整数,表示以  为根的子树的所有节点的权值和

示例1

输入

复制
5 6 1
1 2 3 4 5
1 3
1 2
2 4
2 5
1 2 10
1 3 10
1 4 5
1 5 1
2 3
2 2

输出

复制
13
27

备注:




建议使用 scanf 读入