分析:建树,分析每一层上叶子结点的个数。
利用vector进行存储,bfs进行搜索,book[i]记录每一层叶子结点的个数。
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int n,m,k,level[220],maxLevel,node;
vector<int> ve[220];
int book[220];
void bfs(){
queue<int> que;
que.push(1);
while(!que.empty()){
int q1,q2,q3;
q1=que.front();
que.pop();
maxLevel=max(level[q1],maxLevel); //记录当前最大深度
if(ve[q1].size()==0) {book[level[q1]]++;}
for(int i=0;i<ve[q1].size();i++){
que.push(ve[q1][i]);
level[ve[q1][i]]=level[q1]+1;
}
}
}
int main(){
std::ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=0;i<m;i++){
cin>>node>>k;
for(int j=0;j<k;j++){
int tmp;
cin>>tmp;
ve[node].push_back(tmp);
}
}
bfs();
for(int i=0;i<=maxLevel;i++){
cout<<book[i];
if(i!=maxLevel) cout<<" ";
else cout<<endl;
}
return 0;
}