L3-008. 喊山

一个山头呼喊的声音可以被临近的山头同时听到。题目假设每个山头最多有两个能听到它的临近山头。给定任意一个发出原始信号的山头,本题请你找出这个信号最远能传达到的地方。【何为最远?大致就是BFS的遍历层次吧,可以说是了。】

输入格式:

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

输出格式:

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

输入样例:

  1. 7 5 4
  2. 1 2
  3. 2 3
  4. 3 1
  5. 4 5
  6. 5 6
  7. 1 4 5 77是一个孤立的点,输出其自身!】

输出样例:

  1. 2
  2. 6
  3. 4
  4. 0
  1.  

  1. AC题解,有详细注释呦:
  2.  
  3. 虽然是level-3的题目,但其实也怪简单!加油!相信自己!
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<math.h>
  5. #include<algorithm>
  6. #include<queue>
  7. #include<set>
  8. #include<vector>
  9. #include<string>
  10. #include<stack>
  11. #define inf 0x3f3f3f3f
  12. #define dinf 0x7fffffff*1.0
  13. using namespace std; //L3-008. 喊山
  14. #define N 10008
  15. #define ll long long
  16. struct node{
  17. int x,step;
  18. node(int x=,int step=):x(x),step(step){}//构造函数
  19. };
  20. vector<int>G[N];//构建邻接矩阵
  21. int vis[N];
  22. int bfs(int st){//st是start的缩写,表示开始搜索的点
  23. memset(vis,,sizeof(vis));//标记数组,以免重复访问
  24. queue<node>Q;
  25. Q.push(node(st,));
  26. vis[st]=;
  27. int maxdeep=;//对st来说,可以达到的最大搜索深度
  28. int ans=inf;
  29. node now;
  30.  
  31. while(Q.size()){//每次从队首获得并删除一个点,然后遍历完他的子节点——没标记过的就再次加入队列中
  32. now=Q.front();
  33. Q.pop();
  34. // printf(" *%d/%d* ",now.x,now.step);
  35. if(now.step>maxdeep){
  36. maxdeep=now.step;
  37. ans=now.x;
  38. }else if(now.step==maxdeep){
  39. ans=min(ans,now.x);
  40. }
  41. for(int i=;i<(int)G[now.x].size();i++){
  42. int v=G[now.x][i];//取出now.x在邻接矩阵中的一个子节点V
  43. if(!vis[v]){
  44. vis[v]=;
  45. Q.push(node(v,now.step+));
  46. }
  47. }
  48. }
  49.  
  50. return (ans==st?:ans);//考虑0的特例
  51. }
  52. int main(){
  53. int n,m,k;
  54. scanf("%d%d%d",&n,&m,&k);
  55. int u,v;
  56. for(int i=;i<=n;i++){
  57. G[i].clear();
  58. }
  59. for(int i=;i<=m;i++){
  60. scanf("%d%d",&u,&v);
  61. G[u].push_back(v);
  62. G[v].push_back(u);
  63. }
  64. for(int i=;i<=k;i++){
  65. scanf("%d",&u);
  66. printf("%d\n",bfs(u));
  67. }
  68.  
  69. return ;
  70. }

【邻接矩阵+基础BFS】PAT-L3-008. 喊山的更多相关文章

  1. PAT L3-008. 喊山(BFS)C4 初赛30分

    喊山(30 分) 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的. ...

  2. PAT天梯赛练习题——L3-008. 喊山(邻接表+BFS)

    L3-008. 喊山 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂 ...

  3. PAT 天梯杯 L3-008. 喊山 bfs

    L3-008. 喊山 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂 ...

  4. pat 喊山

    L3-008. 喊山 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出" ...

  5. PAT L3-008 喊山

    https://pintia.cn/problem-sets/994805046380707840/problems/994805050709229568 喊山,是人双手围在嘴边成喇叭状,对着远方高山 ...

  6. PAT L3-008 喊山(广搜)

    喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的.原来它是彝族先民用 ...

  7. L3-008 喊山 (30 分)

    喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的.原来它是彝族先民用 ...

  8. PTA 练习 7-24 喊山 (30 分)

    7-24 喊山 (30 分) 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出"喂-喂喂-喂喂喂--"的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的& ...

  9. PTA喊山

    喊山 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的.原来它是彝族 ...

随机推荐

  1. 时空卷积网络TCN

    1.写在前面 实验表明,RNN 在几乎所有的序列问题上都有良好表现,包括语音/文本识别.机器翻译.手写体识别.序列数据分析(预测)等. 在实际应用中,RNN 在内部设计上存在一个严重的问题:由于网络一 ...

  2. Brave浏览器

    Brave是基于Chromium的开源Web浏览器,具有更快的页面加载速度,并且默认情况下会阻止广告和跟踪器.整合了一些其它浏览器所没有的功能,其中包括被称为 Basic Attention Toke ...

  3. Transformer的numpy实现

    下面的代码自下而上的实现Transformer的相关模块功能.这份文档只实现了主要代码.由于时间关系,我无法实现所有函数.对于没有实现的函数,默认用全大写函数名指出,如SOFTMAX 由于时间限制,以 ...

  4. TCP/IP学习笔记6--TCP/IP模型

    "五月的风慢慢地吹过湖面,泛起波浪层层,一只鸟儿飞过来,在我面前婉转歌唱" TCP/IP是当今计算机网络世界使用最为广泛的协议.该方面的知识对于那些想做网络编程的人来说是只至关重要 ...

  5. NGINX---一次阿里云宝塔开发flask经历

    1.放行端口问题 不但需要在阿里云官网服务器控制台放行端口,还需要在宝塔里面放行端口 2.nginx 宝塔默认的用户是www 句法: user user [group]; 默认: 用户无人; 语境: ...

  6. java中selenium判断某个元素是否存在

    selenium工具 直接通过findElement方法获取某个元素,如果该元素不存在肯定会报错,selenium又没有可以判断该元素是否存在的方法 于是我们可以手写一个工具类,来判断这个元素是否存在 ...

  7. SSM基本案例

    1.搭建环境,导入maven依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sour ...

  8. C++ 根据两点式方法求直线并求两条直线的交点

    Line.h #pragma once //Microsoft Visual Studio 2015 Enterprise //根据两点式方法求直线,并求两条直线的交点 #include"B ...

  9. 关于#define 的宏替换的一些问题

    #define PI 3.14; int main() { , s = ; s = r * r * PI; s = PI * r * r; // s = 3.14; * r * r; printf(& ...

  10. ELK基础配置

    前言 近期在研究日志系统的设计,感觉现在公司的子系统和接口太多了,日志看不过来,就想着有没有一种方法可以把各个程序的日志组合到一起.于是乎就搜到了ELK.开始对ELK的概念完全搞不懂,就照着各个平台文 ...