#P1028. 斐波拉契兔

斐波拉契兔

题目描述

总所周知,斐波拉契数列又可以称为兔子数列。

一天,兔子们想要搬进一个新的洞穴,但是由于兔子太多了,所以得重新开发洞穴使得兔子们都能入住。

洞穴的初始形态为一棵有着 nn 个节点的树,由于现在兔子现在都在外面,所以最初整个洞穴都是空的。

接下来会进行 mm 个操作使得来让兔子行动,操作的种类为 33 种。

  • 1 x\texttt{1 x}:在给定的节点 xx 处进入一只兔子。注意一个点上可以有多只兔子

  • 2 x\texttt{2 x}:发出一道号令,使得之前已经进入洞穴的兔子重新挖掘出一个点数为 xx 的菊花来得到更多的洞穴,注意 此处之前已经挖过洞穴的兔子仍然会进行操作,新挖出来的菊花所代表的洞穴会按照之前兔子进入的顺序进行标号,对于每一朵菊花,花心洞穴的编号将会排在花瓣洞穴的前面。 例如,当前有 cntcnt 个节点时,第 ii 个放置兔子的节点挖出的菊花的花心洞穴编号为 cnt+x×(i1)+1cnt+x \times ( i - 1 ) +1,而花瓣洞穴的编号为 [cnt+x×(i1)+2,cnt+x×i][cnt + x \times ( i - 1 ) + 2, cnt + x × i]

  • 3 x y\texttt{3 x y}:表示一次查询,询问 xx 号洞穴和 yy 号洞穴的 lcalca

输入

输入共 m+2m + 2 行。 第一行 22 个数 nnmm,表示初始点数和操作数。 接下来一行 n1n-1 个数 fa2,fa3...fanfa_2, fa_3...fa_n,表示每个点的父亲。保证任意 i[2,n],faiii\in [2,n] ,fa_i\le i 。 接下来 mm 行数表示操作。输入格式为 opti,xiopt_i, x_i,特别的,如果 opti=3opt_i = 3 ,则格式为 opti,xi,yiopt_i, x_i, y_i。两整数之间有一空格隔开。

输出

对于每次询问,输出答案。

5 5
1 1 2 2
3 1 2
1 1
1 3
2 4
3 11 7
1
1
见附件中的sample.in
见附件中的sample.out

样例说明

为了更为形象的解释操作 22 ,下面是样例的解释图。

可以看出,22 次询问的 LCALCA 均为 11

数据范围

本题一共有16组数据。

test 1 (1个测试点共 7 分 ) :n105,i[1,m],opti=3n\le 10^5,\forall i \in [1,m],opt_i=3

test 2~4 (3个测试点共 21 分) :保证最终的点数不超过 10710^7 个。

test 5~7 (3个测试点共 21 分) : 保证所有的 22 操作均在 11 操作之后

test 8~10 (3个测试点共 21 分): 保证所有的 33 操作均在所有操作之后

test 11~16(6个测试点共 30 分): 没有特殊限制。

对于所有数据,n5×105,m5×105n \le 5 \times 10^5 , m \le 5 \times 10^5

对于任意 opti=2,xi[2,106]opt_i = 2, x_i \in [2, 10^6]

对于任意opti=3,x,yopt_i = 3 , x , y 均在 long long 范围内

题目保证数据均合法

附件下载

T4sample