首页 > 其他 > 详细

PAT Advanced 1004 Counting Leaves

时间:2019-04-06 18:25:31      阅读:127      评论:0      收藏:0      [点我收藏+]
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

class TNode
{
public:
    vector<int> childs;
};

void prob1004()
{
    int n, m;
    scanf("%d%d", &n, &m);
    vector<TNode> tree(n + 1);
    for (int i = 0; i < m; ++i)
    {
        int node, child_num;
        scanf("%d%d", &node, &child_num);
        for (int j = 0; j < child_num; ++j)
        {
            int child_no;
            scanf("%d", &child_no);
            tree[node].childs.push_back(child_no);
        }
    }

    queue<int> level_q;
    level_q.push(1);
    int cur_level = 0;
    int level_end = 0;
    int next_level_end = 0;
    int k = 0;
    vector<int> level_ret(1,0);
    while (!level_q.empty())
    {
        int node_no = level_q.front();
        level_q.pop();

        int child_num = tree[node_no].childs.size();
        if (child_num == 0)
        {
            ++level_ret[cur_level];
        }
        else
        { 
            next_level_end += child_num;
            for (int i = 0; i < child_num; ++i)
            {
                level_q.push(tree[node_no].childs[i]);
            }
        }

        if (k == level_end)
        {
            ++cur_level;
            level_end = next_level_end;
            level_ret.push_back(0);
        }
        ++k;
    }
    for (size_t i = 0; i < level_ret.size() - 1; ++i)
    {
        printf("%d", level_ret[i]);
        if (i < level_ret.size() - 2)
        {
            printf(" ");
        }
    }
}

 

PAT Advanced 1004 Counting Leaves

原文:https://www.cnblogs.com/paralysis/p/10662210.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!