【1094】The Largest Generation (树DFS-水题)

简介: 基础题。这类题也是直接DFS,不是像上次的【1079】&【1090】供应树DFS一样是到了叶子结点就进行“更新/结算”类型,这题直接利用DFS统计每层的结点个数即可。

1.题目

https://pintia.cn/problem-sets/994805342720868352/problems/994805372601090048

输入树的结点个数N(结点编号为1~N),非叶子结点个数M,然后输入M个非叶子结点各自的孩子结点编号,求结点个数最多的一层(层号是从整体来看的,根结点层号为1),输出该层的结点个数和层号(从根结点的第一层开始往下计算)。


2.思路

基础题。

这类题也是直接DFS,不是像上次的【1079】&【1090】供应树DFS一样是到了叶子结点就进行“更新/结算”类型,这题直接利用DFS统计每层的结点个数即可。

3.完整代码

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<vector>
using namespace std;
const int maxn=110;
int parent,sonnum;
vector<int>child[maxn];
//int high[maxn]={0};//high[i]为第i层(从上往下)的结点个数
vector<int>high(maxn);//vector容器定义默认元素初值为0
void DFS(int index,int level){
    high[level]++;
    for(int i=0;i<child[index].size();i++){
      DFS(child[index][i],level+1);//注意[index]和[i]直接没"."
    }
}
int main(){
    int leaf,nonleaf;
    scanf("%d%d",&leaf,&nonleaf);
    for(int i=0;i<nonleaf;i++){
      scanf("%d%d",&parent,&sonnum);
      for(int j=0;j<sonnum;j++){
        int son;
        scanf("%d",&son);
        child[parent].push_back(son);
      }
    }
    DFS(1,1);//题目规定根结点为1号结点,注意第二个参数为1(表示层数为1)
    //下标比较哪层的结点个数最多
    int max=0,maxhigh=0;
    //for(int i=0;i<maxn;i++){//遍历high数组
        for(int i=0;i<high.size();i++){//遍历high数组
      if(high[i]>max){
        max=high[i];
        maxhigh=i;
      }
    }
    printf("%d %d",max,maxhigh);
    system("pause");
}

注意

(1)有的题目最后要输出数据后有个换行符(这里没有也没事)。

(2)这题目规定根结点为1号结点,注意第二个参数为1(表示层数为1)。

(3)定义全局的高度数组int high[maxn]={0};//high[i]为第i层(从上往下)的结点个数,其实也可以设为vector型数组vector<int>high(maxn)。

(4)本题的结点数小于100,数值小,不像之前的【1079】&【1090】供应树DFS结点数可达到10的5次方辣么多。


相关文章
|
6月前
Leetcode 368. Largest Divisible Subset思路及详解
这里有个很简单的数学性质,就是整除的传递性,如果a%b==0 且 b%c == 0,那么a%c == 0,说白了如果c是b的因子,b又是a的因子,那么c肯定是a的因子。这样我们就可以在数组中找出很多整除链(a->b->c->d,其中b是a的因子,c是b的因子,d是c的因子),这样的链条就满足两两整除的条件,题目就变成了求最长的链条。 先上代码,然后我再解释下我的代码。
25 0
|
9月前
|
算法
1091 zoj Knight Moves的BFS算法和DFS
1091 zoj Knight Moves的BFS算法和DFS
38 0
|
6月前
|
Java
hdu1016 Prime Ring Problem【素数环问题(经典dfs)】
hdu1016 Prime Ring Problem【素数环问题(经典dfs)】
24 0
|
7月前
|
人工智能
poj 2299 Ultra-QuickSort 求逆序数 树状数组解法
所谓离散化,我们的了解就是对原数组排序,然后用所在位置的下标代替原数,这样我们就可以把数据范围缩小到1-500000,这个数组是开的下的。
23 0
|
7月前
|
存储 容器
华为机试HJ41:称砝码(深度优先遍历dfs-Depth First Search)
华为机试HJ41:称砝码(深度优先遍历dfs-Depth First Search)
|
8月前
|
算法
The kth great number(小根堆思想,模板题)
The kth great number(小根堆思想,模板题)
27 0
The kth great number(小根堆思想,模板题)
|
9月前
|
人工智能
POJ 2299 Ultra-QuickSort(树状数组+离散化+求逆序数)
POJ 2299 Ultra-QuickSort(树状数组+离散化+求逆序数)
UVA122 树的层次遍历 Trees on the level
UVA122 树的层次遍历 Trees on the level
【1115】Counting Nodes in a BST (30分)【BST建树 DFS】
【1115】Counting Nodes in a BST (30分)【BST建树 DFS】 【1115】Counting Nodes in a BST (30分)【BST建树 DFS】
90 0

热门文章

最新文章