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
                    
                
                
            
        
浙公网安备 33010602011771号