Problem4049--链式前向星

4049: 链式前向星

Time Limit: 1.000 Sec  Memory Limit: 128 MB
Submit: 13  Solved: 5
[Submit] [Status] [Web Board] [Creator:]

Description

链式前向星是一种较为常用的存储非线性数据的存储方式,其借助数组实现类似链表功能的操作方法令人津津乐道。

在常见的图或树结构中,我们需要对每个点所连出去的边进行存储。在链式前向星中,我们对每个点都记录了一个头指针,然后从头指针出发将所有边上的点连到一条链上。

例如如下图的树形结构:


对于节点1,我们可以选择2、3、4中的一个点作为头指针指向的节点,然后将剩下的点连接到头指针的后面。在上图中若选择2作为头指针节点,那么我们有:


若选择3作为头指针节点,我们有:


或者:




可以发现,当选择的头指针节点不同,连接剩余子节点的顺序不同时,我们最终得到的链长度是不同的。注意到使用链式前向星进行存储时,我们总可以将一颗树转化为二叉树。

请你对于给出一颗树,对每个节点假设可以选择任意一个儿子节点作为头指针节点,计算使用链式前向星进行节点存储时。可以得到的二叉树的最大深度为多少,假设根节点的深度为0。


Input

第一行输入一个数n,表示树的节点数量。

从第2行到第n行,每行输入一个数fa��,表示i的父节点为fa��。 (1≤fa<i1≤��<�)

这里我们定义1为根节点,所有父节点的编号小于子节点的编号。


Output

输出一行一个数,表示使用链式前向星存储得到的二叉树的最大深度。

Sample Input

5
1
1
1
2

Sample Output

4

HINT

【数据范围】

对于30%的数据,n≤20

对于100%的数据,n≤10^5


Source/Category

 

[Submit] [Status]