时间: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