题库/Y1250

#Y1250. 树上斐波那契

    传统题 难度: 提高 标签>一本通树链剖分的路径更新查询懒标记与区间更新
时间限制2000 ms
内存限制512 MiB
通过率—0 / 0 次提交
题目描述 查看题解 开始编程Alt+E

Y1250 · 树上斐波那契

退出在线编程模式
提高 读懂题意,让每一次思考成为成长。
时间限制2000 ms
内存限制512 MiB
通过率—0 / 0 次提交

题目描述

定义fibonaccifibonacci数列第ii项为Fib(i)Fib(i),对于任意的大于等于33的ii,有Fib(i)=Fib(i−1)+Fib(i−2)Fib(i)=Fib(i-1)+Fib(i-2),令Fib(1)=Fib(2)=1Fib(1)=Fib(2)=1。 再给出一个有根树TT,TT一共有nn个节点,从1∼n1\sim n编号,11号节点为根,每个点有一个权值,初始的时候都是00,现在有22种操作: U X k 更新操作,对于在XX的子树中的每一个节点(包括XX),如果它到XX的距离(即这个点到XX的唯一简单路径上经过的边数)为DD,那么将它的权值加上Fib(k+D)Fib(k+D)。 Q X Y 询问操作,询问XX到YY的简单路径上的所有点的权值之和(包括XX和YY),将所求的权值和lmod109+7lmod 10^9+7之后输出。

输入

第11行两个用空格隔开的正整数n,mn,m表示节点个数和操作个数。 第2∼n2\sim n行,第ii行一个数xx,表示节点ii在树上的父亲是xx。 接下来mm行,每行一个形如"U X k"或"Q X Y"的操作。

输出

对于每一个询问操作,输出一行为对应顺序的询问操作的答案。

输入样例

5 10
1
1
2
2
Q 1 5
U 1 1
Q 1 1
Q 1 2
Q 1 3
Q 1 4
Q 1 5
U 2 2
Q 2 3
Q 4 5

输出样例

0
1
2
2
4
4
4
10

提示

【样例解释】 这是前22个更新操作的情况:

![题面插图](./1841/file/5687d4ea5c04b1fde6e9d80c.gif)⇒![题面插图](./1841/file/b976bc40e7e21c8b2dbf0d47.gif)⇒![题面插图](./1841/file/0830595203263d9b3c7c5008.gif)
【数据规模】 对于30%的数据:$n,m≤1000,k≤100$; 对于另外30%的数据:每个节点的父亲是在编号小于它的节点中随机产生的; 对于100%的数据:$n,m≤10^5$,$1≤X,Y≤n,k≤10^{15}$。

评测数据说明

本题使用按题意独立构造、以独立程序核对的训练数据及公开样例,共8个测试点,非原站或官方原始数据。总分100分。