喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤。呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的。原来它是彝族先民用来求援呼救的“讯号”,慢慢地人们在生活实践中发现了它的实用价值,便把它作为一种交流工具世代传袭使用。
一个山头呼喊的声音可以被临近的山头同时听到。题目假设每个山头最多有两个能听到它的临近山头。给定任意一个发出原始信号的山头,本题请你找出这个信号最远能传达到的地方。

输入格式:

输入第一行给出3个正整数n、m和k,其中n(<=10000)是总的山头数(于是假设每个山头从1到n编号)。接下来的m行,每行给出2个不超过n的正整数,数字间用空格分开,分别代表可以听到彼此的两个山头的编号。这里保证每一对山头只被输入一次,不会有重复的关系输入。最后一行给出k(<=10)个不超过n的正整数,数字间用空格分开,代表需要查询的山头的编号。

输出格式:

依次对于输入中的每个被查询的山头,在一行中输出其发出的呼喊能够连锁传达到的最远的那个山头。注意:被输出的首先必须是被查询的个山头能连锁传到的。若这样的山头不只一个,则输出编号最小的那个。若此山头的呼喊无法传到任何其他山头,则输出0。

输入样例:

7 5 4
1 2
2 3
3 1
4 5
5 6
1 4 5 7

输出样例:

2
6
4
0

分析:用二维数组,结点push_back的方式存储,因为每次都从1遍历到n会超时,而只要遍历到v[top].size()就不会超时

用广度优先搜索,level记录当前结点的层数,level为自己的上一层结点的level+1,遇到更大层数的时候就令ans又为最大值,让ans取当层的最小值(在不等于被搜索结点本身的时候)。book记录当前结点有没有被访问过,如果没有被访问过就压入队列中,因为可能重复然后导致无限循环,无法输出~

#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
vector<vector<int>> v(10010);
int book[10010];
int main() {int n, m, k, a, b;scanf("%d%d%d", &n, &m, &k);for(int i = 0; i < m; i++) {scanf("%d%d", &a, &b);v[a].push_back(b);v[b].push_back(a);}for(int i = 0; i < k; i++) {scanf("%d", &a);queue<int> q;fill(book, book + 10010, 0);q.push(a);int level[10010];int ans = 10010, maxlevel = 0;book[a] = 1;while(!q.empty()) {int top = q.front();q.pop();if(level[top] > maxlevel) {maxlevel = level[top];ans = 10010;}if(top != a)ans = min(ans, top);for(int j = 0; j < v[top].size(); j++) {if(book[v[top][j]] == 0) {q.push(v[top][j]);book[v[top][j]] = 1;level[v[top][j]] = level[top] + 1;}}}if(ans != 10010) printf("%d\n", ans);else printf("0\n");}return 0;
}

L3-008. 喊山-PAT团体程序设计天梯赛GPLT(广度优先搜索)相关推荐

  1. L2-005 集合相似度-PAT团体程序设计天梯赛GPLT

    题目来源:团体程序设计天梯赛-练习集 题目地址:L2-005 集合相似度 题目大意 给定 nnn 个集合,然后有 kkk 次询问,每次询问都要求出 Nc/Nt×100%N_c / N_t \times ...

  2. L1-079 天梯赛的善良 (20 分)-PAT 团体程序设计天梯赛 GPLT

    天梯赛是个善良的比赛.善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分. 于是命题组首先将编程能力划分成了 106个等级( ...

  3. L1-078 吉老师的回归 (15 分)-PAT 团体程序设计天梯赛 GPLT

    曾经在天梯赛大杀四方的吉老师决定回归天梯赛赛场啦! 为了简化题目,我们不妨假设天梯赛的每道题目可以用一个不超过 500 的.只包括可打印符号的字符串描述出来,如:Problem A: Print &q ...

  4. [Python] L1-052 2018我们要赢-PAT团体程序设计天梯赛GPLT

    2018年天梯赛的注册邀请码是"2018wmyy",意思就是"2018我们要赢".本题就请你用汉语拼音输出这句话. 输入格式: 本题没有输入. 输出格式: 在第 ...

  5. L1-052 2018我们要赢-PAT团体程序设计天梯赛GPLT

    2018年天梯赛的注册邀请码是"2018wmyy",意思就是"2018我们要赢".本题就请你用汉语拼音输出这句话. 输入格式: 本题没有输入. 输出格式: 在第 ...

  6. L3-007. 天梯地图-PAT团体程序设计天梯赛GPLT

    本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至少存在一条可达路线. 输 ...

  7. L3-011 直捣黄龙 (30 分)-PAT 团体程序设计天梯赛 GPLT

    本题是一部战争大片 -- 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营.当这样的路径不唯一时,要求选择可以沿途解放最多城镇 ...

  8. [Python] L1-045 宇宙无敌大招呼-PAT团体程序设计天梯赛GPLT

    据说所有程序员学习的第一个程序都是在屏幕上输出一句"Hello World",跟这个世界打个招呼.作为天梯赛中的程序员,你写的程序得高级一点,要能跟任意指定的星球打招呼. 输入格式 ...

  9. [Python] L1-019. 谁先倒-PAT团体程序设计天梯赛GPLT

    划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒.两人同赢或两人同输 ...

最新文章

  1. 叮!你有一份2018英特尔人工智能大会的邀请函,请查收!
  2. RedHat Enterprise Linux 5.0之LVM逻辑卷管理
  3. 从 exe.config 读取appSettings 中的配置数据
  4. 领悟Web设计模式(转)
  5. 如何检测整数相加溢出
  6. 面试再也不怕问到HashMap(一)
  7. Android开发之带行号显示的Log工具类
  8. 产品经验谈:设计思维 统计思维
  9. sc.textFile()默认读取本地系统文件还是HDFS系统文件?
  10. matlab在循环中保存jpg格式_Matlab如何循环读取文件
  11. VirtualBox安装虚拟机后分辨率调不对怎么办
  12. 计算机毕业设计、实战项目之 [含论文+答辩PPT+任务书+中期检查表+源码等]基于S2SH的医院在线挂号[包运行成功]
  13. photoshop cc 2019 下载教程
  14. netty之wakeup详解
  15. el-upload手动上传图片并限制图片数量、大小和格式
  16. vue调倍速后声音变了_pr加速人声后声音变调失真怎么办?
  17. 旅游类网站的服务器配置,旅游各类 网站界面
  18. [python][Bug记录]特殊16进制转成对应的语言
  19. 用php完成下拉菜单,最新的8个实现下拉菜单功能的总结
  20. Hihocoder-H国的身份证号码I

热门文章

  1. 从 FingBugs的错误来看JAVA代码质量
  2. Hibernate(2012/2/27)
  3. 翻译|How to Export a Connected Component
  4. React Native随笔 2--重要函数
  5. Netty4 学习笔记之一:客户端与服务端通信 demo
  6. push跳转时隐藏tabBar
  7. 《R语言与数据挖掘最佳实践和经典案例》—— 3.5 将图表保存到文件中
  8. 设计模式精髓—封装变化
  9. grep命令与正则表达式
  10. Hibernate的like用法