天天看点

PAT_甲级_1094 The Largest Generation (25point(s)) (C++)【签到题/DFS】1,题目描述2,思路3,AC代码4,解题过程

目录

1,题目描述

题目描述

2,思路

3,AC代码

4,解题过程

1,题目描述

PAT_甲级_1094 The Largest Generation (25point(s)) (C++)【签到题/DFS】1,题目描述2,思路3,AC代码4,解题过程

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,解题过程

一发入魂

PAT_甲级_1094 The Largest Generation (25point(s)) (C++)【签到题/DFS】1,题目描述2,思路3,AC代码4,解题过程

继续阅读