PAT【39/155】每日1-5题 到9/20打卡
树
1004 Counting Leaves
#include<iostream>
#include<cstring>
#include<algorithm>
#define MaxSize 100100
using namespace std;
int h[MaxSize],E[MaxSize],ne[MaxSize],idx=0;
int cnt[MaxSize],maxdepth;
void add(int id,int son){
E[idx]=son;//E单独根据idx存son的值
ne[idx]=h[id];//ne根据idx存son的前一个值,即id的值
h[id]=idx++;//h记的是id的儿子所在的idx值
}
void dfs(int u,int depth){
if(h[u]==-1){//是叶子节点
cnt[depth]++;
maxdepth=max(maxdepth,depth);
return ;
}
for(int i=h[u];i!=-1;i=ne[i]){
dfs(E[i],depth+1);
}
}
int main(){
int N,M,id,K,son;
scanf("%d%d",&N,&M);
memset(h,-1,sizeof(h));
while(M--){
scanf("%d%d",&id,&K);
for(int i=0;i<K;i++){
scanf("%d",&son);
add(id,son);
}
}
dfs(1,0);
cout<<cnt[0];
for(int i=1;i<=maxdepth;i++){
cout<<" "<<cnt[i];
}
cout<<endl;
return 0;
}