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

    参考:https://blog.csdn.net/qq278672818/article/details/54915636

    首先贴上我一开始的部分正确代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int N=1e4+5;
     4 struct node
     5 {
     6     int level,child;//level为该节点层数,child为该节点孩子数
     7     node()
     8     {
     9         level=10000;
    10         child=0;
    11     }
    12 }no[N];
    13 int n,m;
    14 int ans[N];//ans【i】为第i层叶子节点数
    15 int cmp(struct node x,struct node y)
    16 {
    17     return x.level<y.level;
    18 }
    19 int main()
    20 {
    21     cin>>n;
    22     if (n==0)
    23         return 0;
    24     cin>>m;
    25     no[1].level=1;
    26     int k,id,child,maxlevel=1;//maxlevel为最大层数
    27     for (int i=0;i<m;i++)
    28     {
    29         cin>>id>>k;
    30         no[id].child=k;
    31         for (int i=0;i<k;i++)
    32         {
    33             cin>>child;
    34             no[child].level=no[id].level+1;
    35             maxlevel=max(maxlevel,no[child].level);
    36         }
    37     }
    38     sort(no+1,no+1+n,cmp);//按层数排序
    39     memset(ans,0,sizeof(ans));
    40     for (int i=1;i<=n;i++)
    41     {
    42         if (no[i].child==0)
    43         {
    44             ans[no[i].level ]++;
    45         }
    46     }
    47     cout<<ans[1];
    48     for (int i=2;i<=maxlevel;i++)
    49         cout<<" "<<ans[i];
    50     cout<<endl;
    51 
    52     return 0;
    53 }

    经参考了上边的参考链接后发现:若有测试点是无序的,则该解法错误,因为节点的层数设置将不正确。

    再贴上AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 vector<int> ve[110];
     4 int n,m,maxlevel=0;//maxleve记录树的最大层数
     5 int ans[110];//ans[i]保存第i层的叶子节点数
     6 void dfs(int level,int id)//level为当前层数,id为当前节点编号
     7 {
     8     if (ve[id].size()==0)//找到叶子节点
     9     {
    10         maxlevel=max(maxlevel,level);
    11         ans[level]++;
    12         return;
    13     }
    14     for (int i=0;i<ve[id].size();i++)//递归遍历孩子节点
    15     {
    16         dfs(level+1,ve[id][i]);
    17     }
    18 }
    19 int main()
    20 {
    21     cin>>n;
    22     if (n==0)
    23         return 0;
    24     cin>>m;
    25     int id,k,child;
    26     for (int i=0;i<m;i++)
    27     {
    28         cin>>id>>k;
    29         for (int j=0;j<k;j++)
    30         {
    31             cin>>child;
    32             ve[id].push_back(child);
    33         }
    34     }
    35     memset(ans,0,sizeof(ans));
    36     dfs(0,1);
    37     cout<<ans[0];
    38     for (int i=1;i<=maxlevel;i++)
    39     {
    40         cout<<" "<<ans[i];
    41     }
    42     cout<<endl;
    43 
    44     return 0;
    45 }
  • 相关阅读:
    2020 7 13 每日随笔
    2020 7 10 每日总结
    2020 7 14 每日总结
    2020 7 16 每日总结
    2020 7 15 每日总结
    2020 7 19 每日总结
    2020 7 18 每日总结
    2020 7 17 每日总结
    2020 7 11
    2020 7 12
  • 原文地址:https://www.cnblogs.com/hemeiwolong/p/10693167.html
Copyright © 2011-2022 走看看