zoukankan      html  css  js  c++  java
  • pat甲级1004 Counting Leaves

    题意:给你一棵有n个节点的树,其中有m个节点是非叶节点,剩下输入m行,每一行代表一个非叶节点的信息,分别是该非叶节点的序号,有k个孩子,每个孩子节点的序号。要求这棵树每一层有多少个叶子节点。

    分析:数据结构基础题,数据量不大,节点数在100以内,但是一定不能构造一棵满二叉树来做,有可能这棵树退化成一条链,这样就需要2^100-1个节点来构造,内存必爆炸,看挺多人用bfs/dfs做,我用的结构体数组模拟了一下即可。

     1 #include<iostream>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 struct node
     6 {
     7     int father,level,child;
     8 }a[110];
     9 int level[110];
    10 int main()
    11 {
    12     ios::sync_with_stdio(false);
    13     cin.tie(0);
    14     cout.tie(0);
    15     int n,m;
    16     while(cin>>n>>m)
    17     {
    18         memset(a,0,sizeof(a));
    19         memset(level,0,sizeof(level));
    20         int id,k,child_id;
    21         int max_level=1;//这里着重说明一下如果不像特别处理的话初始化为1比较好,有一个样例一直不过是因为我一开始初始化-1,后来发现如果只有一个节点的话,这个变量无法在下面更新,就会出错。
    22         for(int i=0;i<m;i++)
    23         {
    24             cin>>id>>k;
    25             a[id].child=1;//id这个节点有孩子
    26             for(int j=0;j<k;j++)
    27             {
    28                 cin>>child_id;
    29                 a[child_id].father=id;
    30             }
    31         }
    32         a[1].level=1;//设置根节点在第一层
    33         for(int i=1;i<=n;i++)
    34         {
    35             for(int j=1;j<=n;j++)
    36             {
    37                 if(a[j].father==i)
    38                 {
    39                     a[j].level=a[a[j].father].level+1;
    40                     if(a[j].level>max_level)
    41                     {
    42                         max_level=a[j].level;
    43                     }
    44                 }
    45             }
    46         }
    47         for(int i=1;i<=n;i++)
    48         {
    49             if(a[i].child==0)//统计每一层有多少个叶节点
    50             {
    51                 level[a[i].level]++;
    52             }
    53         }
    54         for(int i=1;i<max_level;i++)
    55         {
    56             cout<<level[i]<<" ";
    57         }
    58         cout<<level[max_level]<<endl;
    59     }
    60     return 0;
    61 }
  • 相关阅读:
    mongodb 4.X 创建用户以及授权
    文件上传之后,MD5不一致,大小一致
    golang macaron各种形式入参封装
    说说非托管资源的回收
    layui数据表格批量删除
    除按钮外禁用所有表单项
    could not read Username for 'https://github.com': No error
    进入Web的殿堂与Django的初接触
    shell脚本中的小数运算
    js遍历数组时删除元素最终结果不对
  • 原文地址:https://www.cnblogs.com/wade1998/p/13443045.html
Copyright © 2011-2022 走看看