XJOI 3325 树的深度 题解

时间:0.5s 空间:128M

题目描述:

给你一棵以1为根的树,求树的深度,如下的树深为5
这里写图片描述

输入格式:

第一行输入一个整数n,表示树的总点数
第二行输入n−1个数,第i个数表示i+1的父节点标号

输出格式:

输出一个整数表示树的深度(根节点的深度为1)

样例输入:

10
8 4 8 10 1 1 1 3 8

样例输出:

5

约定:

1<=n<=1000

提示:

提供一种思路,就是DFS,不断搜索至结束为止。不断更新最大的深度。数据比较小,比较好过。

代码:

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#define N 1001
using namespace std ;
struct mrz
{
    int n_s ;        //该点的儿子的个数
    int sn [ N ] ;   //具体儿子是哪几个点
} p [ N ] ;
int n , ans = 1 ;
void DFS ( int k1 , int k2 )
{
    if ( p [ k1 ] . n_s == 0 )
    {
        if ( k2 > ans ) ans = k2 ;
        return ;
    }
    for ( int i = 1 ; i <= p [ k1 ] . n_s ; i ++ ) DFS ( p [ k1 ] . sn [ i ] , k2 + 1 ) ;
    return ;
}
int main ( )
{
    scanf ( "%d" , & n ) ;
    memset ( p , 0 , sizeof ( p ) ) ;
    int k ;
    for ( int i = 2  ; i <= n ; i ++ )
    {
        scanf( "%d" , & k ) ;
        p [ k ] . n_s ++ ;
        p [ k ] . sn [ p [ k ] . n_s ] = i ;
    }
    DFS ( 1 , 1 ) ;
    printf ( "%d" , ans ) ;
    return 0 ;
}

相关链接:

XJOI 题解小全:
https://blog.csdn.net/zj_mrz/article/details/80949787

XJOI 3326 树的深度again 题解:
https://blog.csdn.net/zj_mrz/article/details/81163752

posted @ 2018-07-21 21:11  ZJ_MRZ  阅读(288)  评论(0编辑  收藏  举报