时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld
题目描述
一颗n个节点的树,m次操作,有点权(该节点蚂蚁个数)和边权(相邻节点的距离),蚂蚁们喜欢开会,为蚁族的发展做出长远规划。
三种操作:
操作1:1 i x将节点i的点权修改为x。(1 <= i <= n; 1 <= x <= 100000)
操作2:2 i x将第i条边的边权修改为x。(1 <= i < n; 1 <= x <= 100000)
操作3:3 i 节点i发出开会指令,求树上所有蚂蚁到走到节点i的距离和。(1 <= i <= n)
输入描述:
第1行2个整数 n, m;
第2行n个整数,第i个整数ai 表示节点i的蚂蚁数量;
接下来n-1行,每行两个整数,bi, ci。表示节点i+1与节点bi 之间有一条长为ci的边相连。
接下来m行表示m个操作。
输出描述:
对于每个操作3,输出一个整数,表示树上所有蚂蚁到走到节点i的距离和。
示例1
输入
复制
3 4
1 1 1
1 1
2 1
3 1
1 2 5
2 1 5
3 3
备注:
1 <= n,m <= 100000;
1 <= ai <= 100000;
1 <= bi <= i;
1 <= ci <= 100000;