【C++竞赛 D】树的深度

时间限制:1s 内存限制:32MB
问题描述
数据结构中定义,树的高度为一棵树中所有节点的层次的最大值。现在yyy有一棵树请你帮他求出该树的高度。
输入描述
第一行一个整数T(1≤T≤20)表示数据组数。
对于每组数据第一行一个整数n(1≤n≤40000),表示树中节点数。其中结点1为根节点。接下来n行,第一个数〖num〗_i (1≤i≤n), 表示第i个结点的儿子数,接下来〖num〗_i个数,分别是第i个结点的儿子。
输出描述
对于每组数据,输出一行,一个整数表示该树的深度。
输入样例
1
5
2 4 2
1 5
0
1 3
0
输出样例
3
样例解释
样例如下图:树的高度为3。

这里写图片描述

【题目链接】:

【题解】

水题;
dfs一遍就能求出深度;

【完整代码】

#include <bits/stdc++.h>
#define rep1(i,a,b) for (int i = a;i <= b;i++)
using namespace std;
#define pb push_back;

const int MAXN = 4e4+100;
int T,n,m,ans;
vector <int> a[MAXN];

void dfs(int x,int dep)
{
    ans = max(dep,ans);
    int len = a[x].size();
    rep1(i,0,len-1)
        {
            int y = a[x][i];
            dfs(y,dep+1);
        }
}

int main()
{
    //freopen("D:\rush.txt","r",stdin);
    scanf("%d",&T);
    while (T--)
    {
        ans = 0;
        rep1(i,1,40000) a[i].clear();
        scanf("%d",&n);
        rep1(i,1,n)
        {
            int num,x;
            scanf("%d",&num);
            rep1(j,1,num)
            {
                scanf("%d",&x);
                a[i].push_back(x);
            }
        }
        dfs(1,1);
        printf("%d
",ans);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/AWCXV/p/7626873.html