1094. The Largest Generation (25
2017-12-03 本文已影响0人
cheerss
PAT-A 1094,题目地址:https://www.patest.cn/contests/pat-a-practise/1094
这道题的关键是计算出每个人分别是第几代,然后数出每代人分别有多少个,取最大值即可。
每个人属于第几代都是依赖于其parent的,因此应该从ID为01(第一代)的人开始,计算其child属于第几代,然后一代一代的遍历所有人。
#include <cstdio>
#include <queue>
struct Person{
int id;
int children[100]; //记录其child的ID
int child_count; //有几个child
int generation; //此人属于第几代
Person():id(0), child_count(0), generation(0){}
};
int main(){
int M, N;
int counts[101] = {0}; //用来记录每一代分别有多少人
scanf("%d%d", &N, &M);
Person persons[101];
for(int i = 0;i < M; i++){
int id, count;
scanf("%d%d", &id, &count);
persons[id].id = id;
persons[id].child_count = count;
for(int j = 0; j < count; j++){
scanf("%d", &(persons[id].children[j]));
}
}
//此前的代码都是输入信息
std::queue<int> q; //q用来决定遍历的顺序
q.push(01);
persons[01].generation = 1;
while(!q.empty()){
int parent = q.front();
counts[persons[parent].generation] ++; //这一代又多了一个人
q.pop();
for(int i = 0; i < persons[parent].child_count; i++){
int child = persons[parent].children[i]; //把它的子女放入queue
q.push(child);
persons[child].generation = persons[parent].generation + 1; //child的代数 = parent的代数+1
}
}
int max = 0, index = 1;
for(int i = 1; i < 101; i++){
if(counts[i] > max){
max = counts[i];
index = i;
}
}
printf("%d %d\n", max, index);
return 0;
}