#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<queue>
#define MAX 100
using namespace std;
struct node {
int key;
int level;
node(int _key = 0, int _level = 1) :key(_key), level(_level) {}
};
int main() {
freopen("D://input.txt", "r", stdin);
int nodeNumber, nodeNonleaf, childNumber, i, j, root, sumCount, child, level[MAX], Node[MAX];
//Node 数组存储第i个节点的层级 level存储第i层上有多少个叶节点
int temp, maxLevel;
cin >> nodeNumber >> nodeNonleaf;
vector<vector<int> >parent;
queue<int> Queue;
parent.resize(nodeNumber + 1);
for (i = 0; i < MAX; i++) { //denode nonleaf node on each level
level[i] = 0;
Node[i] = 0;
}
for (i = 0; i < nodeNonleaf; i++) {
cin >> root >> sumCount;
for (j = 0; j < sumCount; j++) {
cin >> child;
parent[root].push_back(child);
}
}
root = 1, maxLevel = 0;
Queue.push(root);
while (!Queue.empty()) {
temp = Queue.front();
if (maxLevel < Node[temp])
maxLevel = Node[temp];
if (parent[temp].size() == 0) {
level[Node[temp]]++;
}
else {
for (i = 0; i < parent[temp].size(); i++) {
Queue.push(parent[temp][i]);
Node[parent[temp][i]] = Node[temp] + 1;
}
}
Queue.pop();
}
cout << level[0];
for (i = 1; i <= maxLevel; i++)
cout << " " << level[i];
cout << endl;
return 0;
}
1004. Counting Leaves
最新推荐文章于 2021-08-10 19:11:25 发布