PAT_甲级_1094 The Largest Generation (25point(s)) (C++)【签到题/DFS】
原创
©著作权归作者所有:来自51CTO博客作者再见萤火虫IT的原创作品,请联系作者获取转载授权,否则将追究法律责任
目录
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:
题目描述
给出一棵家族树,找出人数最多的那一代人(一层表示一代人),输出人数以及层数。
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,解题过程
一发入魂