PAT_甲级_1094 The Largest Generation (25point(s)) (C++)【签到题/DFS】

目录

1,题目描述

题目描述

2,思路

3,AC代码

4,解题过程


1,题目描述

Sample Input:

23 13
21 1 23
01 4 03 02 04 05
03 3 06 07 08
06 2 12 13
13 1 21
08 2 15 16
02 2 09 10
11 2 19 20
17 1 22
05 1 11
07 1 14
09 1 17
10 1 18

 

Sample Output:

9 4

题目描述

给出一棵家族树,找出人数最多的那一代人(一层表示一代人),输出人数以及层数。

 

2,思路

DFS并记录层数,按条件输出即可。

 

3,AC代码

#include<bits/stdc++.h>
using namespace std;
vector<int> tree[101];
int num[101], N, M, maxDep;//num每一层的节点数 N节点总数 M有孩子节点的节点数目 maxDep最大深度

void dfs(int root, int dep){
    num[dep]++;
    maxDep = max(maxDep, dep);
    for(int i = 0; i < tree[root].size(); i++)
        dfs(tree[root][i], dep+1);
}
int main(){
#ifdef ONLINE_JUDGE
#else
    freopen("1.txt", "r", stdin);
#endif // ONLINE_JUDGE
    scanf("%d %d", &N, &M);
    int tem, id, id1;
    for(int i = 0; i < M; i++){
        scanf("%d %d", &id, &tem);
        for(int j = 0; j < tem; j++){
            scanf("%d", &id1);
            tree[id].push_back(id1);
        }
    }
    dfs(1, 1);
    int dep, maxNum = 0;
    for(int i = 1; i <= maxDep; i++)
        if(num[i] > maxNum){
            maxNum = num[i];
            dep = i;
        }
    cout<<maxNum<<' '<<dep;
    return 0;
}

4,解题过程

一发入魂

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值