题目 1765

树上斐波那契

查看题解 ↗GitHub ↗如何评测
题号
1765
时间限制
2000 ms
内存限制
512 MB
标签
数据结构
来源
信息学奥赛一本通 · 高手训练篇·四、数据结构(高手训练)

【题目描述】

定义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个更新操作的情况:

题面图片 ⇒ 题面图片 ⇒ 题面图片

【数据规模】 对于30%的数据:n,m≤1000,k≤100n,m≤1000,k≤100; 对于另外30%的数据:每个节点的父亲是在编号小于它的节点中随机产生的; 对于100%的数据:n,m≤105n,m≤10^5,1≤X,Y≤n,k≤10151≤X,Y≤n,k≤10^{15}。

数据下载

题目 1765 的公开数据

正在读取文件列表…

常用命令

题目 1765 的 ROJ 命令

以下命令默认使用全局安装的 ROJ Skill,请在终端中直接执行;如果修改过 AGENT_HOME,请将命令中的 ~/.agents 替换为对应目录。