PAT 天梯赛 L3-008. 喊山 【BFS】
题目链接
https://www.patest.cn/contests/gplt/L3-008
思路
因为 每个山头 最多有两个 能听到它的 临近山头
那么 我们就可以 给每个 山头 都 分配 最多两个子儿子
然后 再从儿子 往下找
一层一层往下找 如果找的元素 之前已经出现过 这个 就不压入 队列
直到最后 队列为空 输出当层 编号最小的那个
AC代码
#include <cstdio>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <map>
#include <stack>
#include <set>
#include <numeric>
#include <sstream>
#include <iomanip>
#include <limits>
#define CLR(a) memset(a, 0, sizeof(a))
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef pair<string, int> psi;
typedef pair<string, string> pss;
const double PI = 3.14159265358979323846264338327;
const double E = exp(1);
const double eps = 1e-3;
const int INF = 0x3f3f3f3f;
const int maxn = 1e4 + 5;
const int MOD = 1e9 + 7;
int ans;
queue <int> opt;
map <int, int> q, vis;
struct Node
{
int l, r;
}w[maxn];
void bfs(int cur)
{
int len = opt.size();
int Min = INF;
while (len--)
{
int num = opt.front();
opt.pop();
if (num < Min)
Min = num;
if (vis[w[num].l] == 0)
{
opt.push(w[num].l);
vis[w[num].l] = 1;
}
if (vis[w[num].r] == 0)
{
opt.push(w[num].r);
vis[w[num].r] = 1;
}
}
if (opt.empty())
{
ans = Min;
return;
}
else
bfs(cur + 1);
}
int main()
{
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
int a, b;
for (int i = 0; i < m; i++)
{
scanf("%d%d", &a, &b);
q[a] = 1;
q[b] = 1;
if (w[a].l)
w[a].r = b;
else
w[a].l = b;
if (w[b].l)
w[b].r = a;
else
w[b].l = a;
}
for (int i = 0; i < k; i++)
{
scanf("%d", &a);
if (q[a] == 0)
printf("0\n");
else
{
vis.clear();
vis[0] = 1;
while (!opt.empty())
opt.pop();
if (w[a].l != 0)
opt.push(w[a].l);
if (w[a].r != 0)
opt.push(w[a].r);
vis[w[a].l] = 1;
vis[w[a].r] = 1;
vis[a] = 1;
bfs(1);
printf("%d\n", ans);
}
}
}
PAT 天梯赛 L3-008. 喊山 【BFS】的更多相关文章
- PAT天梯赛练习题——L3-008. 喊山(邻接表+BFS)
L3-008. 喊山 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂 ...
- 天梯赛练习 L3-008 喊山 (30分) bfs搜索
题目分析: 本题是一题比较简单的bfs搜索题,首先由于数据给的比较多不能直接开二维数组存放,而是用了vector的动态的二维数组的形式存放,对于每个出发点,我们bfs向四周搜索,标记搜索过的点,遇到搜 ...
- PAT 天梯赛 L2-013. 红色警报 【BFS】
题目链接 https://www.patest.cn/contests/gplt/L2-013 思路 可以通过图的连通块个数来判断 假如 一座城市的失去 改变了其他城市之间的连通性 那么 这座城市本来 ...
- PAT 天梯杯 L3-008. 喊山 bfs
L3-008. 喊山 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂 ...
- PAT L3-008. 喊山(BFS)C4 初赛30分
喊山(30 分) 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的. ...
- 团体程序设计天梯赛(CCCC) L3014 周游世界 BFS证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- PAT天梯赛 L1-049 天梯赛座位分配
题目链接:点击打开链接 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] ...
- PAT天梯赛L3-007 天梯地图
题目链接:点击打开链接 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至 ...
- PAT天梯赛练习题——L3-007. 天梯地图(多边权SPFA)
L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...
随机推荐
- JS: document.getElementBy(), setInerval()
ylbtech-JavaScript-DOM document.getElementBy(),setInerval() 1.A,document.getElementBy()返回顶部 document ...
- 清空catalina.out报错Permission denied
今天在清空catalina.out的时候报错 [yangkun@sg logs]$ sudo echo '' > catalina.out -bash: catalina.out: Permis ...
- 基于Wiremock创建Mock Service平台
转载:http://blog.csdn.net/liuchunming033/article/details/52399397 1.Wiremock工具介绍 一般开发项目都会分模块进行,比如都会把前端 ...
- HDU 3591 The trouble of Xiaoqian(多重背包+全然背包)
HDU 3591 The trouble of Xiaoqian(多重背包+全然背包) pid=3591">http://acm.hdu.edu.cn/showproblem.php? ...
- mbr 备份
MBR共512字节 (1) 第1-446字节:调用操作系统的机器码. (2) 第447-510字节:分区表(Partition table). (3) 第511-512字节:主引导记录签名(0x55和 ...
- Git相关命令教程
一.在GitHub上创建新项目 (1)在GitHub首页 “New repository”,创建新版本库“test” (2)在本地使用GitBash,将repository clone到本地 git ...
- U盘启动盘恢复为普通盘
U盘启动盘恢复为普通盘 此操作必须借助软件完成. 所用软件:diskgenius 下载地址: https://pan.baidu.com/s/1geDkK7L 密码: 8888 先将u盘中文件拷贝 ...
- vue Object.freeze() 优化
参考自:https://segmentfault.com/a/1190000006191558 Object.freeze()是ES5新增的特性,可以冻结一个对象,防止对象被修改. vue 1.0.1 ...
- 【BIEE】BIEE报表根据维度表展示事实表不存在的维度
事实表数据 维度表数据 现在报表展示如下: 这样展示报表让人感觉数据缺失了,需要显示成如下样子,感觉会比较舒服一点 那么,如何实现上面的完美操作呢? 实现步骤 分析编辑页面→表视图属性→包含仅具有空行 ...
- leetcode_Multiply Strings
描写叙述: Given two numbers represented as strings, return multiplication of the numbers as a string. No ...