PAT:1004. Counting Leaves (30) AC
#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;
}