PAT A1094 The Largest Generation
思路:利用vector建树,用数组统计每一层的结点数量,通过DFS来遍历所有结点即可
#include<cstdio>
#include<vector>
using namespace std;
const int maxn = 100;
vector<int> children[maxn];
int levelTable[maxn];
int N, M;
void DFS(int idx, int level) {
levelTable[level]++;
int child_num = children[idx].size();
if(child_num == 0) return;
for(int i = 0; i < child_num; i++)
DFS(children[idx][i], level + 1);
}
int main() {
scanf("%d %d", &N, &M);
int num, child, father;
for(int i = 0; i < M; i++) {
scanf("%d %d", &father, &num);
for(int j = 0; j < num; j++) {
scanf("%d", &child);
children[father].push_back(child);
}
}
//根结点为1,level起始为1
DFS(1, 1);
int maxLevel = 0;
for(int i = 1; i <= N; i++)
if(levelTable[i] > levelTable[maxLevel])
maxLevel = i;
printf("%d %d", levelTable[maxLevel], maxLevel);
return 0;
}