美文网首页
1094. The Largest Generation (25

1094. The Largest Generation (25

作者: cheerss | 来源:发表于2017-12-03 16:24 被阅读0次

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

    相关文章

      网友评论

          本文标题:1094. The Largest Generation (25

          本文链接:https://www.haomeiwen.com/subject/gmaabxtx.html