1094. The Largest Generation (25)

PAT-A 1094,题目地址:https://www.patest.cn/contests/pat-a-practise/1094
这道题的关键是计算出每个人分别是第几代,然后数出每代人分别有多少个,取最大值即可。
每个人属于第几代都是依赖于其parent的,因此应该从ID为01(第一代)的人开始,计算其child属于第几代,然后一代一代的遍历所有人。

#include 
#include 

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 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;
}

你可能感兴趣的:(1094. The Largest Generation (25))