newoj墓地3825: 王国的成熟度(树的深度)

题目描述
ACMCLUB王国有n+1座城市,标号分别是0到n,并且所有城市构成树状结构。0是国王所在的城市,相当于树状结构中的根。其他城市的成熟度定义为从0到该城市所包含的城市数(不包括0和该城市自己)。我们把最大的那个城市的成熟度作为整个王国的成熟度,现在我们想知道王国成熟度是多少。
输入
输入第一行为整数n(n<=10000),接下来有n行,每行输入一个数字,第i行表示节点i的父节点。数据保证构成一棵树。
输出
对于每组输入,输出一行,表示王国的成熟度。
样例输入
5
3
3
0
2
0
样例输出
2

#include"stdio.h"
struct Node{
    int w;//结点标号
    int father ;//父结点的标号
    int depth;//所在深度
}node[10001];
int MAX;
int flag[10086];//标记是否已经计算过深度,避免重复计算
int length(int i);//求深度
int main()
{
    int n,i;
    scanf("%d",&n);
    for(i = 1; i<=n ; i++)
    {
        scanf("%d",&node[i].father );
        node[i].w = i;
        node[i].depth = 0;
    }
    for(i = 1; i<=n; i++)
    {
        if(flag[i] != 1)//如果该结点深度未计算过
            length(i);
    }
    for(i = 1; i<=n; i++)//遍历求最大值
    {
        if(node[i].depth >MAX)
            MAX = node[i].depth ;
    }
    printf("%d",MAX);
    return 0;
}
int length(int i)
{

    if(node[i].father == 0)//父节点为根节点那么层数为0,因为不算根节点的层数(题目要求)
        node[i].depth = 0;
    else
        node[i].depth = length(node[i].father) +1;//否则就是父节点的深度加一。
    flag[i] = 1;
    return node[i].depth;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值