喊山 (bfs)邻接表存
喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤。呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的。原来它是彝族先民用来求援呼救的“讯号”,慢慢地人们在生活实践中发现了它的实用价值,便把它作为一种交流工具世代传袭使用。(图文摘自:http://news.xrxxw.com/newsshow-8018.html)
一个山头呼喊的声音可以被临近的山头同时听到。题目假设每个山头最多有两个能听到它的临近山头。给定任意一个发出原始信号的山头,本题请你找出这个信号最远能传达到的地方。
输入格式:
输入第一行给出3个正整数n
、m
和k
,其中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)邻接表存相关推荐
- QDUOJ 生化危机 邻接表存图+BFS
生化危机 发布时间: 2015年10月10日 18:05 时间限制: 1000ms 内存限制: 256M 描述 X博士想造福人类, 研发一种可以再生肢体的药物, 可是很不幸......研究失败 ...
- 迪杰斯特拉最全详解(朴素版,堆优化+邻接表存图/链式前向星存图)
迪杰斯特拉 迪杰斯特拉算法分析 迪杰斯特拉(朴素版) 迪杰斯特拉堆优化(邻接表存图) 迪杰斯特拉堆优化(链式前向星存图) 最短路--spfa(链式前向星存图) 迪杰斯特拉算法分析 一般用三种数据结构存 ...
- OJ:GPLT L3-008 喊山 BFS模板题
喊山,一个山头呼喊的声音可以被临近的山头同时听到.题目假设每个山头最多有两个能听到它的临近山头.给定任意一个发出原始信号的山头,本题请你找出这个信号最远能传达到的地方. 输入格式: 输入第一行给出3个 ...
- 图的遍历DFS与BFS(邻接表)
#include "stdafx.h" #include <iostream> #include <fstream> #include <queue& ...
- 天梯赛 喊山 bfs
喊山,是人双手围在嘴边成喇叭状,对着远方高山发出"喂-喂喂-喂喂喂--"的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的"讯号",达 ...
- PTA L3-008 喊山 (BFS)
L3-008 喊山 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出"喂-喂喂-喂喂喂--"的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的" ...
- 天梯赛真题L3-008: 喊山(BFS + 数据结构)
L3-008 喊山 题目 一个山头呼喊的声音可以被临近的山头同时听到.题目假设每个山头最多有两个能听到它的临近山头.给定任意一个发出原始信号的山头,本题请你找出这个信号最远能传达到的地方. 输入格式: ...
- 【邻接表存图模板】vector邻接表、数组邻接表、链式前向星
一.目录 一.目录 二.前言 三.邻接表"详解" (一)边的信息 (二)几种邻接表的实现方法"详解" 1.数组邻接表 代码 2.vector邻接表 代码 vec ...
- PAT甲级1094 The Largest Generation:[C++题解]邻接表存树、每层节点数量、vector模拟bfs层序遍历、bfs另类实现
文章目录 题目分析 题目链接 题目分析 来源:PAT网站 题意重述:求一棵树中结点数量最多的层数,并输出最大的数量. 分析:使用邻接矩阵存储树,bool型变量g[N][N] 邻接矩阵,如果有边 置为t ...
最新文章
- win10下vs2015编译的程序如何运行在win7等系统(无需安装Redistributable)
- Miniconda管理多版本python环境
- delphi 2010 调整图片的比例
- Fiori Elements objectPage component creation ui JSON model creation oModel.getMetaModel().load
- HDOJ 1875 HDU 1875 畅通工程再续 ACM 1875 IN HDU
- Java Servlet的配置文件web.xml配置内容和具体含义
- 20150204--JS巩固与加强2-01
- Asp.net的生命周期之应用程序生命周期
- H3C模拟器里的F1060防火墙如何开启WEB界面
- 问题六十八:着色模型(shading model)(2)——光照模型(Light model)
- java学习笔记—标准连接池的实现(27)
- 独角兽影视APP系统源码/双端影视APP源码
- 人脸识别系统Python源代码的实现
- vMix(视频混合器软件)v22.0.0.48免费版
- perl/tk_在Perl / Tk中使用高级小部件
- 人工智能传奇——关于AI起源与发展的故事
- FITC-GSL I荧光素标记的西非单叶豆凝集素 I
- 在主函数内使用宏定义
- python中扑克牌类设计_一摞Python风格的纸牌
- 车路协同-智慧出行(智慧交通解决方案)
热门文章
- dcloud 是什么开发的
- MySQL主从延迟的解决方案
- Ubuntu16.04lts 五笔安装(ibus-table-wubi)
- 2021中大计算机考研,中山大学公布2021年硕士研究生招生拟录取名单公示的通知...
- Unity UI动画通过布尔变量来转换状态机的模板
- dubbo源码学习(四):暴露服务的过程
- NX二次开发-UFUN获取当前工作部件tag UF_ASSEM_ask_work_part
- Flutter简单聊天界面布局及语音录制播放
- 机器学习笔记之核函数
- Plsql 最新版本链接oracle 最新版本详解(14.0)