题目描述
flow 有一棵 n 个点的有根树 T,根为 1,节点编号为 1 至 n 的正整数。
flow 想要构造一个新的有根树序列 T0=T,T1,T2,…,满足 Ti+1=f(Ti),对于所有 i≥0 成立。
其中函数 f(T) 定义如下(如有不理解,建议查看样例解释):
- 定义一棵树 T′。
- 对 T 做树链剖分(重链剖分),若存在多个儿子子树大小相等则取儿子编号较小的为重儿子。
- 设第 2 步中所有重链为 L1,L2,…,Lk,则 T′ 中的所有点编号为 $\{u\} = \{\min\limits_{v_1\in L_1}v_1,\min\limits_{v_2\in L_2}v_2,\dots,\min\limits_{v_k\in L_k}v_k\}$,可以证明,Li 的顺序不会改变最终 T′ 的结构。
- 若对于 i=j,∃x∈Li,y∈Lj,且 T 中存在一条边 (x,y),则 T′ 中存在一条边 (ui,uj),可以发现这样操作后 T′ 一定为一棵 k 个结点的树。
- 将 T′ 的根钦定为 1(注意到一定存在一个 i 使得 ui=1),返回 T′。
flow 给定了你 T,flow 想让你求出一个最小的 m,使得 ∀m′≥m,Tm′=Tm,可以证明,在本题范围内,m≤109。
输入格式
第一行一个整数 n。
第二行 n−1 个整数 fa2,fa3,…,fan,表示在以 1 为根的情况下,2∼n 的父亲节点。
输出格式
一行一个整数,表示 m。
1
0
8
1 1 3 2 2 3 1
4
提示
样例 2 解释
一开始的 T0 为:

考虑 f(T0) 的过程:
- $k=5,L_1=\{1,2,5\},L_2=\{6\},L_3=\{8\},L_4=\{3,4\},L_5=\{7\}$,注意 Li 的顺序其实不重要。
- T′ 中的点: {u}={1,6,8,3,7}。
- T′ 中的边:{(1,3),(1,6),(1,8),(3,7)}。
- 故 T1=f(T0) 为:

- 同理可得,T2=f(T1) 为:

- T3=f(T2) 为:

- T4=f(T3) 为:

- T5=f(T4) 为:

- T6=f(T5) 为······
注意到对于 m′≥4,Tm′=T4,故最终 m=4。
数据范围
请注意常数因子对程序运行效率带来的影响。
对于 100% 的数据,1≤n≤5×106,1≤fai<i。
- Subtask1(10pts):n≤5000。
- Subtask2(5pts):T 的深度不超过 2(根节点的深度记为 1),n≤105。
- Subtask3(15pts):T 的深度不超过 3,n≤105。
- Subtask4(20pts):n≤105。
- Subtask5(15pts):n≤5×105。
- Subtask6(35pts):无特殊限制。