树+DFS
目标:统计每层的叶子节点个数
主要是存储树的父子关系,然后统计。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string.h>
using namespace std;
const int N = 105;
vector<int> G[N];
int leaves[N];
int n, cnt;
void dfs(int r, int l){
if(G[r].size() == 0){
leaves[l]++;
cnt = max(cnt, l);
return;
}
for(int i = 0; i < G[r].size(); i++){
dfs(G[r][i], l+1);
}
}
int main(){
int m, k, u, x;
while(scanf("%d", &n) && n){
scanf("%d", &m);
cnt = 0;
memset(leaves, 0, sizeof leaves);
for(int i = 0 ; i < N; i++) G[i].clear();
while(m--){
scanf("%d %d", &u, &k);
while(k--){
scanf("%d", &x);
G[u].push_back(x);
}
}
dfs(1, 1);
for(int i = 1; i <= cnt; i++){
if(i != cnt) printf("%d ", leaves[i]);
else printf("%d\n", leaves[i]);
}
}
return 0;
}