我在洛谷第一次发个题解,管理员居然把这题的题解通道关了。。。。

看到好像没有优先队列的题解,来水一手

思路

  • 形似A* 却不是A*
  • 只需要求出其中一个点到其他点的D系数,所有D系数的最大值即是答案。

数学推理:如果有三个点a,b,c,a到b的难度系数为x,a到c的难度系数为d,显然从c到b可以从a经过,难度系数就是x和y较大的一个。

也就是说这是一个连通图,我们要求的是连通图中所有边权最大的值

  • 利用优先队列,先搜索难度系数小的,再由小的系数递推

这个方法唯一可能存在的问题就是:

难度系数小+更大的难度系数组合

和难度系数大+难度系数大(小)的组合(但是都比上面这个更大的难度系数小)

答案应该是第二个

那么当我们用优先队列搜索时,刚开始确实是从较小的开始,但是在更新的时候会把较大的也一起更新

那么后面先从队列里出来的肯定是第二个

说了这么多也不知道大家听懂没有

直接上代码吧,虽然不会有二分那么快,但是优先队列优化也是可以过的

代码

#include <iostream>
#include <utility>
#include <queue>
#include <cmath>
using namespace std;
typedef long long ll;
#define fi(i, a, b) for (int i = a; i <= b; ++i)
#define fr(i, a, b) for (int i = a; i >= b; --i)
#define x first
#define y second
#define sz(x) ((int)(x).size())
#define pb push_back
using pii = pair<int, int>;
//#define DEBUG
int n, m, stax, stay, count, res;
bool vis[505][505];//记录是否访问过
int flag[505][505];//标记是否是路标
int moun[505][505];//初始海拔数组
int dx[4] = {1, -1, 0, 0};//方向向量
int dy[4] = {0, 0, 1, -1};
struct car
{
int x, y, D;
bool operator<(const car &p) const
{
return D > p.D;
}
};
int bfs(int x, int y)
{
priority_queue<car> pri;
pri.push({x, y, 0});
while (!pri.empty())
{
car temp = pri.top();
int x = temp.x, y = temp.y;
// cout << x << " " << y << " " << temp.D << endl;Debug
pri.pop();
vis[x][y] = true;
if (flag[x][y])//如果是个路标,下次就不会再访问了
{
flag[x][y] = 0;
count--;
res = max(res, temp.D);
if (count == 0)
return res;
}
fi(i, 0, 3)
{
int p = x + dx[i];
int q = y + dy[i];
if (p <= n && p >= 1 && q <= m && q >= 1 && !vis[p][q])
{
int r = abs(moun[x][y] - moun[p][q]);
r = max(temp.D, r);
pri.push({p, q, r});
}
}
}
return res;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
fi(i, 1, n) fi(j, 1, m) cin >> moun[i][j];
fi(i, 1, n) fi(j, 1, m)
{
cin >> flag[i][j];
if (flag[i][j])
count++, stax = i, stay = j;
}//记录所有路标的数量,并且从最后一个路标开始
cout << bfs(stax, stay) << endl;
#ifdef DEBUG
//freopen(D:\in.txt,r,stdin);
#endif
return 0;
}

洛谷P2658的更多相关文章

  1. 洛谷——P2658 汽车拉力比赛

    P2658 汽车拉力比赛 题目描述 博艾市将要举行一场汽车拉力比赛. 赛场凹凸不平,所以被描述为M*N的网格来表示海拔高度(1≤ M,N ≤500),每个单元格的海拔范围在0到10^9之间. 其中一些 ...

  2. 洛谷—— P2658 汽车拉力比赛

    https://www.luogu.org/problem/show?pid=2658 题目描述 博艾市将要举行一场汽车拉力比赛. 赛场凹凸不平,所以被描述为M*N的网格来表示海拔高度(1≤ M,N ...

  3. 洛谷 P2658 汽车拉力比赛

    题目传送门 解题思路: 二分答案,然后bfs验证,如果从一个路标可以达到其它所有路标,则答案可行.知道找到最佳答案. AC代码: #include<iostream> #include&l ...

  4. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  5. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  6. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  7. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  8. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  9. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

  10. 洛谷P1538迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

随机推荐

  1. 7月 Splashtop上线了这些新功能 快来看鸭

    经过我们的攻城狮天天努力,我们的软件又得到了升级和完善,上线了一些有用的新功能和增强功能,快来看看吧. Splashtop已为Splashtop Business Access,Splashtop远程 ...

  2. 4G EPS 中的 User Plane

    目录 文章目录 目录 前文列表 用户平面 EPS UP 中的 GTP-U F-TEID 的组成 UE IP 数据包在 GTP-U Tunnel 上的封装流程 GTP-U 与 EPS Bearer MM ...

  3. 读写可编程 SIM/USIM 卡

    目录 文章目录 目录 SIM 卡 USIM 卡 USIM 卡的关键参数 pySim 读写软件与 ADM key SIM 卡 SIM 卡,用户身份模块(Subscriber Identity Modul ...

  4. 新一代AI搜索引擎神器推荐及效果测试:秘塔AI、天工AI、Perplexity等

    新一代AI搜索引擎神器推荐效果测试:秘塔AI.天工AI.Perplexity等 0.前言: 搜索的核心:事物对象级别的搜索 回到搜索引擎本身,搜索引擎的早期出现是为了解决互联网上信息过载的问题.随着互 ...

  5. MindSponge分子动力学模拟——体系控制(2024.05)

    技术背景 在传统的分子动力学模拟软件中,对于分子体系的控制,例如控制体系的相对位置亦或是绝对位置,通常都是通过施加一些约束算法来实现的.例如用于限制化学键的LINCS算法,又比如水分子体系非常常用的S ...

  6. git 安装 和 git 客户端的使用

    git clone 命令 # 查前当前登录用户的一些基本信息: # 查看当前登录的账号:git config user.name # 修改当前登录的账号为xcj:git config --global ...

  7. Django----模型----数据库的基本操作

    1.添加记录 方式一:save() 方式二(推荐):create() 2.查询记录 (1)all() 查询所有记录,返回queryset对象. stu_list = Student.objects.a ...

  8. 文件系统(五):exFAT 文件系统原理详解

    前言 exFAT是微软2006年推出的一种文件系统,距今已快二十年,相比于FAT16和FAT32,exFAT还是算年轻.exFAT一直是微软的一个专用文件系统,直到2019年微软发布它的规范,目前微软 ...

  9. lxl学长讲课笔记

    lxl 学长讲课笔记 常数种可能性的状态 通过预先处理多种状态的信息,从而快速的转换状态. 经典操作:flip. 分析信息的思路 利用线段树 利用线段树的时候,如何合并两个分支区间的信息,我们需要有如 ...

  10. kettle从入门到精通 第六十四课 ETL之kettle kettle中执行SQL脚本步骤,使用需当心

    1.群里有不定时会有同学反馈执行SQL脚本步骤使用有问题,那么咱们今天一起来学习下该步骤.trans中的执行SQL脚本有两方面功能,使用时需小心,不然很容易踩坑. 官方定义: 翻译: 您可以使用此步骤 ...