XJOI 3326 树的深度again 题解

该博客介绍了信息学竞赛中的一道题目——求解树的深度。通过广度优先搜索(BFS)解决,提供了一种使用vector存储的解决方案,特别提醒注意空间效率,因为数据规模可达100000。博客还给出了样例输入、输出以及相关链接,包括前一题目的题解作为参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间:1s 空间:128M

题目描述:

给你一棵以1为根的树,求树的深度

输入格式:

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

输出格式:

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

样例输入:

4
1 2 3

样例输出:

4

约定:

1<=n<=100000

提示:

此题是XJOI 3325 树的深度 的数据加强板。深度优先搜索请点击以下链接(不能满分,仅供参考):
https://blog.youkuaiyun.com/zj_mrz/article/details/81149168
深搜能过吗?很悬。但别忘了还有广搜!同时,储存建议用vector,空间炸了的话就不是开玩笑了。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std ;
int l = 1 , r = 1 , dl [ 100001 ] , n ;
vector<int> T [ 100001 ];
int bh [ 100001 ] ;
int main ( )
{
    scanf ( "%d" , & n ) ;
    int k ;
    memset ( dl , 0 , sizeof(dl) ) ;
    memset ( bh , 0 , sizeof(bh) ) ;
    for ( int i = 2 ; i <= n ; i ++ )
    {
        scanf  ( "%d" , & k ) ;
        T [ k ] . push_back ( i ) ; 
    }
    dl  [ 1 ] = 1 ;
    bh [ 1 ] = 1 ;
    while ( l <= r )
    {
        for ( int i = 0 ; i < T [ dl[l] ] . size ( ) ; i ++ )
        {
            r ++ ;
            dl [ r ] = T [ dl[l] ] [ i ] ;
            bh [ r ] = bh [ l ] + 1 ;
        }
        l ++ ;
    }
    int ans = 0 ;
    for (int i = 1 ; i <= n+1 ; i ++ ) if ( bh [ i ] > ans ) ans = bh [ i ] ;
    printf ( "%d\n" , ans ) ; 
    return 0 ;
}

相关链接:

XJOI 题解小全:
https://blog.youkuaiyun.com/zj_mrz/article/details/80949787

XJOI 3325 树的深度 题解:
https://blog.youkuaiyun.com/zj_mrz/article/details/81149168

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值