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

输入格式:

输入第一行给出3个正整数nmk,其中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

解题思路

  • 正常BFS即可,但是注意到里面其实有一个比较成分,无论怎么设计顺序也没法讨巧减少时间,索性就不剪枝了,同一层的节点都进入队列,比较就行了
  • 现在才发现邻接表是真的快,像这道题就是,用其他的数据结构会超时

代码

#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <cmath>
#include <cstdio>
#include <bitset>
using namespace std;const int N = 10000 + 3;
static int n, m, k;
static vector<int> v1[N];int query(int index){int curr, clevel;int result = N, rlevel = -1;queue<int> q1, qlevel;bitset<N> isUsed;isUsed.reset();q1.push(index);qlevel.push(0);while(!q1.empty()){curr = q1.front(), clevel = qlevel.front();// cout << curr << " " << clevel << endl;q1.pop(); qlevel.pop();if(isUsed[curr]) continue;else isUsed[curr] = 1;if(clevel > rlevel || (clevel == rlevel && result > curr)){result = curr;rlevel = clevel;}for(int i=0; i<v1[curr].size(); i++){if(!isUsed[v1[curr][i]]){q1.push(v1[curr][i]);qlevel.push(clevel + 1);}}}return result;
}int main(){cin >> n >> m >> k;for(int i=0; i<m; i++){int i1, i2;cin >> i1 >> i2;v1[i1].push_back(i2);v1[i2].push_back(i1);}for(int i=0; i<k; i++){// cout << "i = " << i << endl;int index; cin >> index;if(query(index) != index) cout << query(index) << endl;else cout << "0" << endl;}return 0;
}

OJ:GPLT L3-008 喊山 BFS模板题相关推荐

  1. 天梯赛 喊山 bfs

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

  2. PTA L3-008 喊山 (BFS)

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

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

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

  4. 【蓝桥杯】九宫重排(bfs模板题)

    题目描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的局面记为:12 ...

  5. pta-L3-008 喊山 BFS

    题目 题解:BFS,我没考虑相同输出最小居然也水过-- 代码: #include <iostream> #include<cstdio> #include<queue&g ...

  6. 迷宫寻宝(BFS模板题)

    洪尼玛今天准备去寻宝,在一个n*n (n行, n列)的迷宫中,存在着一个入口.一些墙壁以及一个宝藏.由于迷宫是四连通的,即在迷宫中的一个位置,只能走到与它直接相邻的其他四个位置(上.下.左.右).现洪 ...

  7. 107. 二叉树的层序遍历 II and 102. 二叉树的层序遍历 023(BFS模板题打两道)

    一:题目 二:上码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* Tre ...

  8. 蓝桥 穿越雷区【第六届】【决赛】【C组】 BFS模板题 python

    想说的话 大家好

  9. 【CCCC】L3-008 喊山 (30分),BFS搜索最长路,水题

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

最新文章

  1. [MySQL] 几句MySQL时间筛选SQL语句[进入查看]
  2. (译+原)std::shared_ptr及std::unique_ptr使用数组
  3. flutter中state详解
  4. mysql 主从复制介绍_MySQL 主从复制介绍
  5. 变频器输出功率_100米的深井泵,如何接变频器,怎样控制
  6. python常见编程面试题_python面试题基础部分 80题
  7. 优秀博客 --敏感词汇过滤
  8. oracle中execute函数,Oracle 动态SQL execute immediate写法 zt
  9. 写了个数码照片的自动分类整理工具
  10. [Angularjs] 第一步开始一个项目
  11. 计算机的组成 —— 主板
  12. 《中国人工智能学会通讯》——第12章 12.1 新世纪知识工程—— 在哪里跨越
  13. Java伪装csrss_csrss.exe是什么进程,是病毒吗?
  14. 黑马程序员java学习笔记——正则表达式、反射
  15. 手动挡五个档位示意图_捷达档位示意图手动挡
  16. 【Unity Shader】屏幕后处理3.0:均值模糊和高斯模糊
  17. 多个containers 共用一个pvc_长兴PVC废料回收一斤多少钱,ps废料回收
  18. 这些Word小技巧,你知道吗?
  19. 端到端机器学习_使用automl进行端到端的自动化机器学习过程
  20. 刘慈欣回应《流浪地球》热点问题:承认有些设定有bug...

热门文章

  1. 【go编译和反编译概述】
  2. 微信小程序判断手机系统
  3. 推荐必读书籍整理集合
  4. 显卡、GPU、CPU、CUDA、显存、RTX/GTX及查看方式
  5. Unity 电脑CPU 显卡查询 存储空间查询
  6. Nutanix 助力苏州金龙引领中国客车行业智能制造转型
  7. 将qrcode生成的二维码转成图片
  8. fopen 和它的读写标识 r、r+、rb+、rt+、w+.....
  9. 火鸟数据库 linux,firebird数据库
  10. android 自定义特效,Android自定义View:实现炫酷的点赞特效