分析:求樹中每層的葉子節點數並輸出。直接DFS。
代碼:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int maxn = 110;
vector<int> child[maxn];
bool vis[maxn];
int num[maxn];
int deep;
int m, n, k;
void DFS(int root, int d) {
int nch = child[root].size();
if(nch == 0) {
deep = max(deep, d);
num[d]++;
return;
}
for(int i = 0; i < nch; ++i) {
int u = child[root][i];
vis[u] = true;
DFS(u, d+1);
}
}
int main() {
scanf("%d%d", &m, &n);
for(int i = 0; i < n; ++i) {
int fa;
scanf("%d %d", &fa, &k);
for(int j = 0; j < k; ++j){
int x;
scanf("%d", &x);
child[fa].push_back(x);
}
}
deep = 0;
memset(vis, 0, sizeof(vis));
vis[1] = true;
DFS(1, 0);
for(int i = 0; i < deep+1; ++i) {
printf("%d%c", num[i], i == deep ? '\n' : ' ');
}
return 0;
}