码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • PAT 1004 Counting Leaves (C++)


    A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child.

    Input Specification:

    Each input file contains one test case. Each case starts with a line containing 0

    ID K ID[1] ID[2] ... ID[K]
    

    where ID is a two-digit number representing a given non-leaf node, K is the number of its children, followed by a sequence of two-digit ID's of its children. For the sake of simplicity, let us fix the root ID to be 01.

    The input ends with N being 0. That case must NOT be processed.

    Output Specification:

    For each test case, you are supposed to count those family members who have no child for every seniority level starting from the root. The numbers must be printed in a line, separated by a space, and there must be no extra space at the end of each line.

    The sample case represents a tree with only 2 nodes, where 01 is the root and 02 is its only child. Hence on the root 01 level, there is 0 leaf node; and on the next level, there is 1 leaf node. Then we should output 0 1 in a line.

    Sample Input:

    1. 2 1
    2. 01 1 02

    Sample Output:

    0 1

    题意:给出n个点个m个有孩子的节点,问每一层无孩节点的个数

    测试点2是节点就只有根节点(n=1,m=0),输出1

    解析:我们先读入每个有孩子的节点,然后开一个sd[ i ]数组来记录第 i 节点在哪一层,因为根节点在第1层,因此我们可以遍历所有点,他们的孩子的深度就是父节点深度+1,然后利用广搜来进行答案记录

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. const int N=105;
    6. vector<int> v[N];
    7. int g[N],n,m,sd[N];//g记录每个深度无孩节点的个数,sd[i]记录第i节点所在的层数
    8. void solve()
    9. {
    10. queue<int> q;
    11. q.push(1);
    12. while(q.size())
    13. {
    14. int u=q.front();
    15. q.pop();
    16. for(int i=0;isize();i++)
    17. {
    18. int j=v[u][i];
    19. if(v[j].size()==0) g[sd[j]]++;//对应节点没有孩子,对应深度满足条件节点个数+1
    20. else q.push(j);
    21. }
    22. }
    23. }
    24. int main()
    25. {
    26. scanf("%d%d",&n,&m);
    27. sd[1]=1;//根节点在深度1
    28. int maxn=0;//记录最大深度,为后输出
    29. while(m--)
    30. {
    31. int fa,k,p;
    32. scanf("%d%d",&fa,&k);
    33. while(k--)
    34. {
    35. scanf("%d",&p);
    36. v[fa].push_back(p);//父节点存储儿子
    37. }
    38. }
    39. for(int i=1;i<=n;i++)
    40. {
    41. for(int j=0;jsize();j++)
    42. {
    43. sd[v[i][j]]=sd[i]+1;//儿子深度=父亲深度+1
    44. maxn=max(maxn,sd[i]+1);//更新最大深度
    45. }
    46. }
    47. solve();
    48. for(int i=1;i<=maxn;i++)
    49. {
    50. if(i!=1) printf(" ");
    51. printf("%d",g[i]);
    52. }
    53. if(maxn==0) printf("1");//特判,节点就只有根节点,输出1
    54. printf("\n");
    55. return 0;
    56. }

  • 相关阅读:
    Linux 中如何安全地抹去磁盘数据?
    基于DotNetty实现自动发布 - 自动检测代码变化
    js 回到顶部逻辑实现和elementUI源码解析
    MongoDB的使用以及和python的交互
    微信小程序小游戏开发,微信开发者工具提示该目录下的项目(wxapp2)已在工具中创建,怎么办
    【Linux】CentOS-6.8超详细安装教程
    基于协同过滤推荐算法的在线教育平台(Vue+Node.js+SSM)
    多线程(初阶)
    第四章 神经网络的学习——数据&损失函数&数值微分&神经网络的梯度&学习算法的实现
    YOLOv9改进策略 | 添加注意力篇 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)
  • 原文地址:https://blog.csdn.net/qq_63739337/article/details/127657128
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号