【GPLT】 2018年天梯赛全国总决赛 L2-2 小字辈(c++)
题目:

这一题并不是很难,属于常规的图论遍历题,这里我是用的bfs(dfs应该也可以,但明显bfs简单一些)。
本人写的时候写了很多没必要头文件,自己可以根据内容删去,必要的我会写上注释
如有错误,请指正。
知识点:bfs,邻接表,队列
代码如下(本人喜欢多换行,所以可能看起来比较长,但其实内容不多):
1 #include<iostream>//必要
2 #include<cstring>//必要
3 #include<cstdio>
4 #include<queue>//必要,也可以自己写个模拟队列
5 #include<algorithm>
6 #include<string>//必要
7 #include<map>
8 using namespace std;
9 const int N=1e7+10;
10 int e[N],ne[N],idx,h[N];//邻接表用
11 int n;
12 int d[N],b[N];
13 void add(int a,int b)
14 {
15 e[idx]=b,ne[idx]=h[a],h[a]=idx++;
16 }
17 void bfs(int root)
18 {
19 queue<int> q;//建个队列
20 q.push(root);//
21 while(q.size())
22 {
23 int t=q.front();//取出点
24 q.pop();
25 for(int i=h[t];i!=-1;i=ne[i])//存储的是下标
26 {
27 int j=e[i];
28 if(d[j]==0)//如果没有遍历过
29 {
30 d[j]=d[t]+1;//辈分加1
31 q.push(j);//放进队列
32 }
33 }
34 }
35 }
36 int main()
37 {
38 cin>>n;
39 int x;
40 int root;
41 memset(h,-1,sizeof h);//初始化表头
42 for(int i=1;i<=n;i++)
43 {
44 cin>>x;
45 if(x!=-1) add(x,i);//建立练习,注意是x,i不是i,x。因为x是父亲,应该是父亲走向儿子
46 else
47 {
48 root=i;//找到老祖宗(根结点)
49 d[root]=1;
50 }
51 }
52 bfs(root);
53 int ma=0;
54 for(int i=1;i<=n;i++)
55 {
56 ma=max(ma,d[i]);//寻找(数字)最大的辈分
57 }
58 cout<<ma<<endl;
59 int cnt=0;//下面的只是为了输出没什么实际内容,就是单纯的把最小辈分人的编号放在另外一个数组
60 for(int i=1;i<=n;i++)
61 {
62 if(d[i]==ma)
63 {
64 b[cnt++]=i;
65 }
66 }
67 for(int i=0;i<cnt;i++)
68 {
69 if(i!=cnt-1) cout<<b[i]<<" ";
70 else cout<<b[i]<<endl;//输出要求
71 }
72 return 0;
73 }
【GPLT】 2018年天梯赛全国总决赛 L2-2 小字辈(c++)的更多相关文章
- 2018年天梯赛LV2题目汇总小结
Ⅰ.L2-1 分而治之---邻接表 分而治之,各个击破是兵家常用的策略之一.在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破.为此参谋部提供了若干打击方案.本题 ...
- 2019天梯赛练习题(L2专项练习)
7-2 列出连通集 (25 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序 ...
- 2019 gplt团体程序设计天梯赛总结
分很菜… 以后写题一定记得把题意理清楚了再开始写. 模拟题还是大坑,代码还是写得不够多,代码量一大就写bug. 补题 l1-8 估值一亿的AI核心代码 补题链接:https://pintia.cn/p ...
- PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)
PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++: 欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...
- L1-049. 天梯赛座位分配
天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位 ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 052-053
今日刷题,水题水题 ------------------------------------------------L1-052------------------------------------ ...
- 2018天梯赛第一次训练题解和ac代码
随着评讲的进行代码和题解会逐步放上来 2018天梯赛第一次训练 1001 : 进制转换 Time Limit(Common/Java):1000MS/10000MS Memory Limit: ...
- 2018天梯赛、蓝桥杯、(CCPC省赛、邀请赛、ICPC邀请赛)校内选拔赛反思总结!
才四月份,上半年的比赛就告一段落了.. 天梯赛混子,三十个人分最低,把队友拖到了国三,蓝桥杯省二滚粗,止步京城,旅游选拔赛成功选为替补二队,啊! 不过既然已经过去,我们说些乐观的一面,积累了大赛经验是 ...
- 第四届CCCC团体程序设计天梯赛 后记
一不小心又翻车了,第二次痛失200分 1.开局7分钟A了L2-3,一看榜已经有七个大兄弟排在前面了,翻车 * 1 2.把L1-3 A了18分,留了两分准备抢顽强拼搏奖,最后五秒钟把题过了,万万没想到还 ...
随机推荐
- MSF基本使用
MSF 链接数据库 linux查找文件 find / -name dabase.yml 链接数据库 db_connect -y path/database.yml db_status 查询数据库链接状 ...
- google hacker语法
intext:关键字 搜索网页正文中含有这些关键字的网页. intitle:关键字 搜索网页标题中含有这些关键字的网页. cache:关键字 搜索含有关键字内容的cache. define:关键字 搜 ...
- TiDB 5.0认证指南之PCTA PCTP
1. TiDB简介 TiDB 是 PingCAP 公司自主设计.研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analyt ...
- JVM的垃圾回收算法有哪些
常用的垃圾回收算法有如下四种:标记-清除.复制.标记-整理和分代收集. 标记-清除算法从算法的名称上可以看出,这个算法分为两部分,标记和清除.首先标记出所有需要被回收的对象,然后在标记完成后统一回收掉 ...
- xml文件使用DOM解析,报异常org.xml.sax.SAXParseException,"characterEncoding" 的引用必须以 ';' 分隔符结尾异常
这个异常一般为xml文件对&的报错,只需要将&改为转义后的&即可解决
- 如何将 memcached 中 item 批量导入导出?
您不应该这样做!Memcached 是一个非阻塞的服务器.任何可能导致 memcached 暂停或瞬时拒绝服务的操作都应该值得深思熟虑.向 memcached 中批量导入数据往往不是您真正想要的!想象 ...
- uWSGI+django+nginx的工作原理流程与部署
二.必要的前提 2.1 准备知识 django 一个基于python的开源web框架,请确保自己熟悉它的框架目录结构. uWSGI 一个基于自有的uwsgi协议.wsgi协议和http服务协议的web ...
- 怎么理解 Redis 事务?
1)事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断. 2)事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执 ...
- 学习heartbeat-04 原理及部署
1. Heartbeat介绍 1.1 Heartbeat作用 通过它可以将资源(IP及程序服务等资源)从一台故障计算机快速转移到另一台运转正常的机器继续提供服务,在实际生产应用场景中,heartbea ...
- (stm32学习总结)—LCD—液晶显示
显示器简介 显示器属于计算机的 I/O 设备,即输入输出设备.它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具.常见的有 CRT 显示器.液晶显示器.LED 点阵显示器及OLED 显示器 本章 ...