代码如下:
#include<iostream>
#include<queue>
#include<stdio.h>
using namespace std;
int level[105];
struct node{
int child_num;
int child[105];
int level;
node(){
for(int i=0;i<105;i++){
child[i]=0;
}
child_num=0;
}
}tree[105];
int level_order(){
for(int i=0;i<105;i++){
level[i]=0;
}
queue<node> q;
int max_level=-1;
tree[1].level=0;
q.push(tree[1]);
while(!q.empty()){
node a=q.front();
q.pop();
if(a.level>max_level){
max_level=a.level;
}
if(a.child_num==0){
level[a.level]++;
}else{
for(int i=0;i<a.child_num;i++){
tree[a.child[i]].level=a.level+1;
q.push(tree[a.child[i]]);
}
}
}
return max_level;
}
int main(){
int n,m;
int num;
int id;
cin>>n>>m;
for(int i=0;i<m;i++){
cin>>id>>num;
tree[id].child_num=num;
for(int j=0;j<num;j++){
cin>>tree[id].child[j];
}
}
int max_level=level_order();
for(int i=0;i<=max_level;i++){
if(i!=max_level){
cout<<level[i]<<' ';
}else{
cout<<level[i];
}
}
return 0;
}