标题只是为了吸引你点进来的。
题目描述
有一棵 n 个点的树与 n 个集合 Si,初始时 Si={i},树上每个节点有一个权值 ai。
对于一个集合 S 与两个节点 u,v 而言,令 t=0,然后依次遍历树上 u 到 v 的简单路径经过的节点。假若遍历到的节点 i∈S ,那么让 t←t+ai ,否则让 t←t−ai。其中 ← 表示赋值。将最后抵达节点 v 后 t 的值定义为 cost(S,u,v)(此时节点 v 对 t 的改变已经完成),再定义一个集合的权值 val(S)=∑u∈S∑v∈S∖ucost(S,u,v)。
现在有 q 次事件。每次事件形如 u,v
,表示令 Su←Su∪Sv 并删除集合 Sv。
事件结束后,你需要回答 val(Su) 对 232 取模后的值,保证事件开始前集合 Su,Sv 均未被删除。
输入格式
第 1 行共两个数 n,q。
第 2 n 行,每行两个数 u,v 代表树上一条边。
第 n+1 行共 n 个数,分别表示 a1∼an。
第 n+2∼n+q+1 行,共 q 行,每行两个数 u,v
代表一次事件。
输出格式
共 q 行,表示对于每个事件回答,一行一个答案。
样例 #1
样例输入 #1
样例输出 #1
样例 #2
样例输入 #2
样例输出 #2
提示
本题开启子任务捆绑。
子任务编号 |
特殊性质 |
分值 |
1 |
n,q≤103 |
20 |
2 |
n,q≤4×104 |
35 |
3 |
对于任意 1≤i≤n 满足 ai=231 |
5 |
4 |
对于任意 1≤i≤n 保证满足 ai=0 的 i 至多有 10 个 |
20 |
5 |
无特殊性质 |
对于 100% 的数据,n,q≤2×105,ai<232。