该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
题目描述
徐老师最近在疯狂刷数据结构体——线段树,树状数组,ST表,单调队列,单调栈
各种动态维护的数据结构充满了徐老师的思想
于是徐老师突发奇想——这些数据结构基本都是用树形结构或者其他的结构去维护一个线性的数据
那么如果现在数据本身就是树形结构呢?
现在徐老师设计了一棵以 1 号点为根的树,这棵树上一共包含 n 个结点,一开始每个结点的权值均为 0
有 m 次操作
操作分两种:
1 u x k,遍历以 u 为根结点的整棵子树(包含 u),对于子树上的一个结点 v 来说,设 u 和 v 的深度差值为 len,则将 v 号点的权值增加 (x+len∗k)∗(−1)len
2 u,表示查询编号为 u 的结点现在的权值
现在徐老师想拿这道题考考你,你能解决吗?
输入格式
输入第一行包含两个正整数 n,m,表示 n 个结点 m 次操作
接下来 n−1 行分别表示 2∼n 号点的父亲结点编号 fatheri
接下来 m 行,每行表示一次操作,格式为 1 u x k 或者 2 u,含义如题
输出格式
对于每次 2 操作输出答案,由于答案可能过大,请输出答案对 109+7 取模后的结果(若为负数请将取模结果转换为正数)
数据范围
对于 20% 的数据,满足 n≤103,m≤103,且 ∣x∣,∣k∣≤103;
对于 50% 的数据,满足 n≤105,m≤103,且 ∣x∣,∣k∣≤103;
对于 100% 的数据,满足 n≤105,m≤105,且 ∣x∣,∣k∣≤103。
特别的,保证题目中给出的树高不超过 30000
样例输入
5 8
1
1
3
3
1 1 0 2
2 1
2 2
2 4
1 3 1 3
2 3
2 4
2 1
样例输出
0
1000000005
4
1000000006
0
0
样例解释
这棵树的形状如图
1
/ \
2 3
/ \
4 5
第一次修改操作(1 1 0 2)对于每个节点的影响为
1:0+(0+2∗0)∗(−1)0=0
2:0+(0+2∗1)∗(−1)1=−2
3:0+(0+2∗1)∗(−1)1=−2
4:0+(0+2∗2)∗(−1)2=4
5:0+(0+2∗2)∗(−1)2=4
第二次修改操作(1 3 1 3)对于每个节点的影响为
3:−2+(1+3∗0)∗(−1)0=−1
4:4+(1+3∗1)∗(−1)1=0
5:4+(1+3∗1)∗(−1)1=0