#include<bits/stdc++.h>
using namespace std;
#define MAXN 100
bool vis[MAXN];
vector<int> Adj[MAXN]; //邻接表
int res[MAXN]; //存放每层的叶节点
int max_level; //记录最深层次
void dfs(int x , int level);
int main(){
int N , M;
scanf("%d" , &N);
if(N == 0) return 0;
scanf("%d" , &M);
for(int i = 0;i < M;i ++){
int fa , son , k;
scanf("%d %d" , &fa , &k);
for(int j = 0;j < k;j ++){
scanf("%d" , &son);
Adj[fa].emplace_back(son);
}
}
dfs(1 , 0);
for(int i = 0;i <= max_level;i ++){
printf(i == 0 ? "%d" : " %d" , res[i]);
}
return 0;
}
void dfs(int x , int level){
vis[x] = true;
if(level > max_level){
max_level = level;
}
if(Adj[x].size() == 0){
res[level] ++;
return;
}
for(int i = 0;i < Adj[x].size();i ++){
int v = Adj[x][i];
if(!vis[v]){
dfs(v , level + 1);
}
}
}
1004 Counting Leaves
最新推荐文章于 2024-10-09 22:28:58 发布
该程序使用C++进行深度优先搜索(DFS)遍历树结构,通过邻接表存储树的边,计算最深层次并找出各层的叶节点数量。
摘要由CSDN通过智能技术生成