1004 Counting Leaves
#include<iostream>
#include<vector>
using namespace std;
//定义结点
vector<int>nodes[101];
//每层叶子的数量
int preleaves[101];
//族谱的最大深度
int preleaves_depth=-1;
void dfs(int index,int depth){
if(nodes[index].empty()){
preleaves[depth]++;
//更新最大深度
preleaves_depth=depth>preleaves_depth?depth:preleaves_depth;
return;
}
for(int i:nodes[index]){
dfs(i,depth+1);
}
}
int main(){
int N,M,node,num,child;
//处理第一行数据
cin>>N>>M;
for(int i=0;i<M;i++){
cin>>node>>num;
for(int j=0;j<num;j++){
cin>>child;
nodes[node].push_back(child);
}
}
dfs(1,0);
cout<<preleaves[0];
for(int i=1;i<=preleaves_depth;i++){
cout<<" "<<preleaves[i];
}
return 0;
}
