#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