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

来源:互联网 发布:软件检测机构行业 编辑:程序博客网 时间:2024/06/06 08:42

时间限制: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\n",ans);    }    return 0;}
0 0
原创粉丝点击