//刚开始想着不用dfs 直接计算每个节点所在的层数 后来发现这个方法有两个点过不去;因为在输入不是按照层序输入的时候这个方法行不通…… 后来用一个简单的dfs标注层数就过了……
#include <iostream>
using namespace std;
typedef struct{
int child_num;
int level;
int child[100];
} Node;
Node tree[101];
void dfs(Node* head){
int count = head->child_num;
if (count == 0) {
return;
}
for (int i=0; i<count; i++) {
tree[head->child[i]].level = head->level+1;
dfs(&tree[head->child[i]]);
}
}
int main(){
int n,m;
cin>>n>>m;
//initialize
for(int i=0;i<101;i++){
tree[i].child_num=0;
tree[i].level=-1;
for (int j=0; j<100; j++) {
tree[i].child[j]=0;
}
}
int max_level = -1;
tree[1].level=0;
tree[1].child_num=0;
if (m==0) {
cout<<1;
return 0;
}
//read input
for (int i=0;i<m;i++){
int id,child_num;
cin>>id>>child_num;
tree[id].child_num = child_num;
for(int j=0;j<child_num;j++){
int c_id;
cin>>c_id;
tree[id].child[j]=c_id;
}
}
//calculate the level of each node
dfs(&tree[1]);
int res[101]={0};
for(int i=0;i<=100;i++){
if(tree[i].child_num==0&&tree[i].level!=-1){//node without children
res[tree[i].level]++;
max_level = max_level<tree[i].level?tree[i].level:max_level;//renew the max level
}
}
//output
for(int i=0;i<=max_level;i++){
if (i!=max_level) {
cout<<res[i]<<" ";
}else cout<<res[i];
}
return 0;
}
PAT甲级 1004 Counting Leaves (30)
猜你喜欢
转载自blog.csdn.net/ken_for_learning/article/details/78357468
今日推荐
周排行