题解
第一行输入节点数N和非叶子节点数M,接下来的M行输入结点ID,在结点ID中所包含的孩子的个数K,接下来K个输入孩子节点的ID。看了好多遍才看懂,理解能力是真的菜。
DFS
#include <iostream>
#include <bits/stdc++.h>
#include <string>
using namespace std;
const int maxx=101;
vector<int> Node[maxx];
int num[maxx],max_depth;//num[i]用来记录第i层没有结点的个数
void dfs(int index, int depth){
if(Node[index].size()==0){
num[depth]++;
max_depth=max(max_depth,depth);
return;
}
for(int i=0;i<Node[index].size();i++){
dfs(Node[index][i],depth+1);
}
}
int main()
{
int m,n,id,k,c;
cin>>n>>m;
for(int i=0;i<m;i++){
cin>>id>>k;
for(int j=0;j<k;j++){
cin>>c;
Node[id].push_back(c);
}
}
dfs(1,0);
cout<<num[0];
for(int i=1;i<=max_depth;i++){
cout<<" "<<num[i];
}
return 0;
}