【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分,留了两分准备抢顽强拼搏奖,最后五秒钟把题过了,万万没想到还 ...
随机推荐
- 【算法】两个list合并
转载博客地址 http://blog.sina.com.cn/s/blog_5da93c8f0101fdrp.html 有两个ArrayList,分别为list1和list2,分析这两个list后生成 ...
- Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?
Redisson.Jedis.lettuce 等等,官方推荐使用 Redisson.
- WEB架构深度优化之PHP
一.PHP引擎缓存加速优化(4种) 1.eAccelerator 2.XCache 3.APC 4.Zend 二.使用tmpfs作为缓存加速缓存的目录(可用rc.local或fstab来自动挂载) m ...
- leetcode_两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同 ...
- MATLAB与Carsim联合仿真时提示matlab not found的解决方法(CarSim在联合仿真时提示找不到MATLAB的解决方法)
CarSim8.02并没有提供选择联合仿真的MATLAB/Simulink的版本的功能,CarSim总是与最后安装的MATLAB/Simulink进行联合仿真,如果安装有多个matlab版本则只打开最 ...
- 如何解决Visual Studio 2017 运行后控制台窗口一闪就消失了
出现这种情况的原因 安装使用Visual Studio 2017 后,用Ctrl+F5运行程序,结果控制台窗口一闪就没了,也没有出现"press any key to continue-&q ...
- window onerror 各浏览器下表现总结
window onerror 各浏览器下表现总结 做前端错误上报,必然离不开window onerror,但window onerror在不同设备上表现并不一致,浏览器为避免信息泄露,在一些情况下并不 ...
- 记录axios高效率并发的方法
// 首先我的请求是统一管理 方便创建拦截器 export function login(parameter) { return axios({ url: api.Login, ...
- Java 请求转发和重定向的区别以及JavaWeb三大作用域
三大作用域以及转发和重定向 学习总结 1. 转发和重定向 转发 重定向 转发和重定向的区别: 什么时候用转发什么时候用重定向 三大作用域 作用域类型 作用域方法 如何选择作用域 总结 学习总结 1. ...
- java多线程的状态转换以及基本操作
1. 新建线程 一个java程序从main()方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,但实际上java程序天生就是一个多线程程序,包含了:(1)分发处理发送给给JVM信号的线程 ...