喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤。呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的。原来它是彝族先民用来求援呼救的“讯号”,慢慢地人们在生活实践中发现了它的实用价值,便把它作为一种交流工具世代传袭使用。(图文摘自:http://news.xrxxw.com/newsshow-8018.html)

一个山头呼喊的声音可以被临近的山头同时听到。题目假设每个山头最多有两个能听到它的临近山头。给定任意一个发出原始信号的山头,本题请你找出这个信号最远能传达到的地方。

输入格式:

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

输出格式:

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

输入样例:

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

输出样例:

2
6
4
0
注意:  邻接矩阵会超时,要用邻接链表
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include<vector>
#include <queue>
using namespace std;
vector<int> map[10005];  //邻接列表
int vis[10005];
struct Node{       int node;     //node为哪个点 int num;      //num标记第几次传播到这个点
};
queue<Node> q;
Node p[10005];
int main()
{int n,m,k;int a[15];scanf("%d %d %d",&n,&m,&k);for(int i=0;i<m;i++){int x,y;scanf("%d %d",&x,&y);map[x].push_back(y);map[y].push_back(x);}for(int i=0;i<k;i++)   //bfs搜索 {memset(vis,0,sizeof(vis));Node a1,a2;int d=0,Max=1;scanf("%d",&a1.node);a1.num=1;q.push(a1);vis[a1.node]=1;p[d++]=a1;while(q.empty()==0){a2=q.front();if(a2.num>Max) Max=a2.num;q.pop();int flag=0;for(int j=0;j<map[a2.node].size();j++){if(vis[map[a2.node][j]]==0){vis[map[a2.node][j]]=1;Node a3;a3.node=map[a2.node][j];a3.num=a2.num+1;q.push(a3);p[d++]=a3;flag++;}if(flag==2) break;}}for(int j=0;j<d;j++){if(p[j].num==Max) {if(Max!=1)            printf("%d\n",p[j].node);else        //Max==1时说明没有传任何一个山头  输出0 printf("%d\n",0);break;}}} } 
												

喊山 (bfs)邻接表存相关推荐

  1. QDUOJ 生化危机 邻接表存图+BFS

    生化危机 发布时间: 2015年10月10日 18:05   时间限制: 1000ms   内存限制: 256M 描述 X博士想造福人类, 研发一种可以再生肢体的药物, 可是很不幸......研究失败 ...

  2. 迪杰斯特拉最全详解(朴素版,堆优化+邻接表存图/链式前向星存图)

    迪杰斯特拉 迪杰斯特拉算法分析 迪杰斯特拉(朴素版) 迪杰斯特拉堆优化(邻接表存图) 迪杰斯特拉堆优化(链式前向星存图) 最短路--spfa(链式前向星存图) 迪杰斯特拉算法分析 一般用三种数据结构存 ...

  3. OJ:GPLT L3-008 喊山 BFS模板题

    喊山,一个山头呼喊的声音可以被临近的山头同时听到.题目假设每个山头最多有两个能听到它的临近山头.给定任意一个发出原始信号的山头,本题请你找出这个信号最远能传达到的地方. 输入格式: 输入第一行给出3个 ...

  4. 图的遍历DFS与BFS(邻接表)

    #include "stdafx.h" #include <iostream> #include <fstream> #include <queue& ...

  5. 天梯赛 喊山 bfs

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

  6. PTA L3-008 喊山 (BFS)

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

  7. 天梯赛真题L3-008: 喊山(BFS + 数据结构)

    L3-008 喊山 题目 一个山头呼喊的声音可以被临近的山头同时听到.题目假设每个山头最多有两个能听到它的临近山头.给定任意一个发出原始信号的山头,本题请你找出这个信号最远能传达到的地方. 输入格式: ...

  8. 【邻接表存图模板】vector邻接表、数组邻接表、链式前向星

    一.目录 一.目录 二.前言 三.邻接表"详解" (一)边的信息 (二)几种邻接表的实现方法"详解" 1.数组邻接表 代码 2.vector邻接表 代码 vec ...

  9. PAT甲级1094 The Largest Generation:[C++题解]邻接表存树、每层节点数量、vector模拟bfs层序遍历、bfs另类实现

    文章目录 题目分析 题目链接 题目分析 来源:PAT网站 题意重述:求一棵树中结点数量最多的层数,并输出最大的数量. 分析:使用邻接矩阵存储树,bool型变量g[N][N] 邻接矩阵,如果有边 置为t ...

最新文章

  1. win10下vs2015编译的程序如何运行在win7等系统(无需安装Redistributable)
  2. Miniconda管理多版本python环境
  3. delphi 2010 调整图片的比例
  4. Fiori Elements objectPage component creation ui JSON model creation oModel.getMetaModel().load
  5. HDOJ 1875 HDU 1875 畅通工程再续 ACM 1875 IN HDU
  6. Java Servlet的配置文件web.xml配置内容和具体含义
  7. 20150204--JS巩固与加强2-01
  8. Asp.net的生命周期之应用程序生命周期
  9. H3C模拟器里的F1060防火墙如何开启WEB界面
  10. 问题六十八:着色模型(shading model)(2)——光照模型(Light model)
  11. java学习笔记—标准连接池的实现(27)
  12. 独角兽影视APP系统源码/双端影视APP源码
  13. 人脸识别系统Python源代码的实现
  14. vMix(视频混合器软件)v22.0.0.48免费版
  15. perl/tk_在Perl / Tk中使用高级小部件
  16. 人工智能传奇——关于AI起源与发展的故事
  17. FITC-GSL I荧光素标记的西非单叶豆凝集素 I
  18. 在主函数内使用宏定义
  19. python中扑克牌类设计_一摞Python风格的纸牌
  20. 车路协同-智慧出行(智慧交通解决方案)

热门文章

  1. dcloud 是什么开发的
  2. MySQL主从延迟的解决方案
  3. Ubuntu16.04lts 五笔安装(ibus-table-wubi)
  4. 2021中大计算机考研,中山大学公布2021年硕士研究生招生拟录取名单公示的通知...
  5. Unity UI动画通过布尔变量来转换状态机的模板
  6. dubbo源码学习(四):暴露服务的过程
  7. NX二次开发-UFUN获取当前工作部件tag UF_ASSEM_ask_work_part
  8. Flutter简单聊天界面布局及语音录制播放
  9. 机器学习笔记之核函数
  10. Plsql 最新版本链接oracle 最新版本详解(14.0)