热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PAT甲级1004:统计叶节点数量

参考:https:blog.csdn.netqq278672818articledetails54915636首先贴上我一开始的部分正确代码:1#inc

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

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

1 #include
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&#61;&#61;0)
23 return 0;
24 cin>>m;
25 no[1].level&#61;1;
26 int k,id,child,maxlevel&#61;1;//maxlevel为最大层数
27 for (int i&#61;0;i)
28 {
29 cin>>id>>k;
30 no[id].child&#61;k;
31 for (int i&#61;0;i)
32 {
33 cin>>child;
34 no[child].level&#61;no[id].level&#43;1;
35 maxlevel&#61;max(maxlevel,no[child].level);
36 }
37 }
38 sort(no&#43;1,no&#43;1&#43;n,cmp);//按层数排序
39 memset(ans,0,sizeof(ans));
40 for (int i&#61;1;i<&#61;n;i&#43;&#43;)
41 {
42 if (no[i].child&#61;&#61;0)
43 {
44 ans[no[i].level ]&#43;&#43;;
45 }
46 }
47 cout<1];
48 for (int i&#61;2;i<&#61;maxlevel;i&#43;&#43;)
49 cout<<" "<<ans[i];
50 cout<<endl;
51
52 return 0;
53 }

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

再贴上AC代码&#xff1a;

1 #include
2 using namespace std;
3 vector<int> ve[110];
4 int n,m,maxlevel&#61;0;//maxleve记录树的最大层数
5 int ans[110];//ans[i]保存第i层的叶子节点数
6 void dfs(int level,int id)//level为当前层数&#xff0c;id为当前节点编号
7 {
8 if (ve[id].size()&#61;&#61;0)//找到叶子节点
9 {
10 maxlevel&#61;max(maxlevel,level);
11 ans[level]&#43;&#43;;
12 return;
13 }
14 for (int i&#61;0;i//递归遍历孩子节点
15 {
16 dfs(level&#43;1,ve[id][i]);
17 }
18 }
19 int main()
20 {
21 cin>>n;
22 if (n&#61;&#61;0)
23 return 0;
24 cin>>m;
25 int id,k,child;
26 for (int i&#61;0;i)
27 {
28 cin>>id>>k;
29 for (int j&#61;0;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<0];
38 for (int i&#61;1;i<&#61;maxlevel;i&#43;&#43;)
39 {
40 cout<<" "<<ans[i];
41 }
42 cout<<endl;
43
44 return 0;
45 }

 

转:https://www.cnblogs.com/hemeiwolong/p/10693167.html



推荐阅读
  • A题简单判断#includeusingnamespacestd;typedeflonglongll;intt;intmain(){cint;whil ... [详细]
  • 本文介绍了一个使用Keras框架构建的卷积神经网络(CNN)实例,主要利用了Keras提供的MNIST数据集以及相关的层,如Dense、Dropout、Activation等,构建了一个具有两层卷积和两层全连接层的CNN模型。 ... [详细]
  • 本文由Jogis撰写,详细探讨了React中的组件设计模式,包括控制组件、非控制组件及混合模型组件,分析了各自的优缺点及其应用场景。 ... [详细]
  • 题目概述:给定一个数组,计算其中所有连续子序列中平均值不低于给定值k的数量。通过将每个元素减去k并计算前缀和,问题转化为二维数点问题。此问题可以通过离线处理,利用树状数组来高效解决。 ... [详细]
  • 一个产品数组拼图|集合 2 (O(1)空间) ... [详细]
  • DP:InitiallyIthinkof1DDP,dp[i]standsfortheshorteststringoffirsticharacters,then:dp[i]minLe ... [详细]
  • [转] JavaScript中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的区别
    ECMAScript将对象的属性分为两种:数据属性和访问器属性。每一种属性内部都有一些特性,这里我们只关注对象属性的[[Enumerable]]特征,它表示是否通过for-in循环 ... [详细]
  • 本文详细介绍了如何通过 `vue.config.js` 文件配置 Vue CLI 的打包和代理设置,包括开发服务器配置、跨域处理以及生产环境下的代码压缩和资源压缩。 ... [详细]
  • 题目描述了一个n行m列的矩阵,矩阵中的每个元素代表一个石块。接下来会有q次操作,每次操作指定一个坐标(x, y),表示击碎该位置的石块。击碎后,需要检查周围的石块是否变得不稳定(即其左右或上下至少有一个方向上的相邻石块已被击碎)。如果某个石块变得不稳定,则应将其一并击碎。对于每次操作,需输出因此次操作而被击碎的石块总数。 ... [详细]
  • 本文将详细介绍如何使用ViewPager实现多页面滑动切换,并探讨如何去掉其默认的左右切换动画效果。ViewPager是Android开发中常用的组件之一,用于实现屏幕间的内容切换。 ... [详细]
  • 程序打印菱形 ... [详细]
  • Android实战:使用ProgressBar与AsyncTask实现数据异步加载
    本文介绍如何利用ProgressBar和AsyncTask在Android应用中实现数据的异步加载。包括加载数据的不同状态下的UI展示,如加载中、加载成功及加载失败时的界面处理。 ... [详细]
  • 本文通过一个具体的用户管理项目,详细介绍如何使用Spring MVC框架进行开发。从用户实体类的设计到控制器的实现,再到视图层的展示,全面解析Spring MVC的核心功能与实现细节。 ... [详细]
  • 题目描述:孩子们围坐在一起,分享水果,场面温馨。然而,由于孩子们身高不同,排队时显得高低不齐。给定孩子们的身高序列,通过交换某些孩子的顺序,计算每次交换后的序列混乱度。 ... [详细]
  • 本文详细介绍了Redis中对象的内部结构,包括数据类型、编码方式、最近访问时间(LRU)和引用计数等关键属性。通过这些属性,Redis能够高效地管理和优化内存使用。 ... [详细]
author-avatar
手机用户2502885897
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有