题意: 给定树的结点个数n,m个非叶子结点的孩子,要求输出树的每层孩子个数
tip:建树+层序遍历
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> no_child(100);
vector<vector<int>> fam(100);
int maxdepth=-1;
void dfs(int index,int depth) {
if(!fam[index].size()) {
no_child[depth]++;
maxdepth=max(maxdepth,depth);
} else {
for(int i=0; i<fam[index].size(); ++i)
dfs(fam[index][i],depth+1);
}
}
int main() {
int n,m;
cin>>n>>m;
while(n) {
for(int i=0;i<100;++i)
fam[i].clear();
no_child.clear();
maxdepth=-1;
if(n==1)
cout<<1<<endl;
else {
for(int i=0; i<m; ++i) {
int id,k;
cin>>id>>k;
for(int j=0; j<k; ++j) {
int t;
cin>>t;
fam[id].push_back(t);
}
}
dfs(1,0);
cout<<no_child[0];
for(int i=1; i<=maxdepth; ++i)
cout<<" "<<no_child[i];
cout<<endl;
}
cin>>n>>m;
}
return 0;
}