T635263 [Codechef FEB13] Obserbing the tree树上询问
题目描述
小 N 最近在做关于树的题。今天她想了这样一道题,给定一棵 n 个节点的树,节点按1~n 编号,一开始每个节点上的权值都是 0,接下来有 m 个操作。第一种操作是修改,给出 4 个整数 x,y,a,b,对于 x 到 y 路径上加上一个首项是 a,公差是 b 的等差数列,因为小 N 十分谨慎,所以她每做完一个修改操作就会保存一次,初始状态是第 0 次保存的局面。第二种操作是求和,给出 2 个整数 x,y,输出 x 到 y 路径上所有节点的权值和。第三种操作是读取之前第 x 次保存的局面,所有节点的状态回到之前第 x 次保存的状态。现在请你对每一个求和操作输出答案。
输入格式
第一行两个整数 n,mn,m 表示节点个数和操作次数。
接下来 n-1n−1 行每行 22 个整数 u_i,v_iu
i
,v
i
表示了这棵树中 u_iu
i
和 v_iv
i
这 22 个节点间有边相连。
接下来 mm 行每行先有一个字符表示了操作的类型;同时为了保证在线,我们设 tt 表示上一次输出的答案:
如果是 c,那么代表了一个修改操作,接下来有 44 个整数 x1,y1,a,bx1,y1,a,b,为了使得询问在线,正确的 x=x1\text{ xor }tx=x1 xor t,y=y1\text{ xor }ty=y1 xor t,如果之前没有输出过那么当成 00。
如果是 q,那么代表了一个求和操作,接下来有两个整数 x1,y1x1,y1,和修改操作一样需要 \text{xor }txor t。
如果是 l,那么代表了一次读取操作,接下来一个整数 x1x1,正确的 x=x1\text{ xor }tx=x1 xor t。
输出格式
对于每一个求和操作,输出求和后的值。
说明/提示
100% 的数据中 n,m \leq 10^5n,m≤10
5
,0 \leq a,b \leq 10000≤a,b≤1000,0 \leq x1,y1 \leq 10^10≤x1,y1≤10
1
,修改次数