#include<stdio.h> #include<vector> const int MAX=510; using namespace std; int n,m,le=0; //节点数,非叶子节点数,最深层叶层数 vector<int> child[MAX]; //存储孩子情况 int number[MAX]; //每一层叶子数 void DFS(int s,int l) { if(child[s].size()==0) { ++number[l]; if(le<l) le=l; return; } for(int i=0 ; i<child[s].size() ; ++i) { DFS(child[s][i],l+1); } } int main() { scanf("%d%d",&n,&m); for(int i=0 ; i<m ; ++i) { int node,k,c; scanf("%d%d",&node,&k); for(int j=0 ; j<k ; ++j) { scanf("%d",&c); child[node].push_back(c); } } DFS(1,1); //从节点1开始,1是第一层 for(int i=1; i<=le ; ++i) //输出每层叶子数 { printf("%d",number[i]); if(i!=le) printf(" "); } return 0; }
时间: 2024-10-10 14:59:09