统计一棵树上每层的叶节点, bfs
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
const int MAXN = 110;
vector<int> mp[MAXN];
int book[MAXN], ans[MAXN];
int bfs(int st) {
memset(book, 0, sizeof(book));
memset(ans, 0, sizeof(ans));
queue<int> q;
q.push(st);
book[st] = 1;
int p = 1;
while (!q.empty()) {
int t = q.front();
q.pop();
if (mp[t].empty())
ans[book[t]]++;
else
for (vector<int>::iterator it = mp[t].begin(); it != mp[t].end(); it++) {
q.push(*it);
book[*it] = book[t] + 1;
p = max(p, book[*it]);
}
}
return p;
}
int main() {
int n, m;
scanf("%d%d", &n, &m);
while (m--) {
int x, k, y;
scanf("%d%d", &x, &k);
while (k--) {
scanf("%d", &y);
mp[x].push_back(y);
}
}
int p = bfs(1);
for (int i = 1; i <= p; i++)
printf("%d%c", ans[i], i<p?' ':'\n');
return 0;
}