版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dpdpd/article/details/82119430
题意:给一棵树,计算每一层的没有儿子节点的个数
思路:bfs,然后用level数组保存每个点的层数
注意点:
1、当只有一个节点的时候,输出1
#include<bits/stdc++.h>
using namespace std;
int level[105];
int ans[105];
int main(){
int n,m;
cin>>n>>m;
queue<int> q;
vector<int> v[105];
for(int i=0;i<m;i++){
int r,k;
cin>>r>>k;
int tmp;
for(int j=0;j<k;j++){
cin>>tmp;
v[r].push_back(tmp);
}
}
q.push(1);
level[1]=1;
int maxl = 1;
while(!q.empty()){
int r = q.front();
q.pop();
vector<int>::iterator it;
for(it=v[r].begin();it!=v[r].end();it++){
level[*it]=level[r]+1;
maxl = max(maxl,level[*it]);
if(v[*it].size()==0)
ans[level[r]+1]++;
q.push(*it);
}
}
if(v[1].size()==0){
cout<<"1\n";
}else{
for(int i=1;i<=maxl;i++){//只有一个节点的情况
if(i!=1)
cout<<" "<<ans[i];
else
cout<<ans[i];
}}
return 0;
}