Luogu P11131 【MX-X5-T3】「GFOI Round 1」Cthugha 题解
P11131 【MX-X5-T3】「GFOI Round 1」Cthugha
有意思的最短路题目,需要对迪杰斯特拉算法有深入的理解。
首先,不存在最小值的条件是相邻的两个格子加起来值小于 \(0\),此时在这两个格子之间反复横跳,就没有最小值。
观察到 \(q\) 很小,所以我们把网格建成一个图,对于每一个人跑一遍到每一个点的最短路,然后按照对于每一个点取所有人的最大值。统计答案是取最小值即可。
注意有负权边,而 SPFA 死了,所以考虑迪杰斯特拉。如果你对迪杰斯特拉有深入了解,直接把 SPFA 换成迪杰斯特拉,然后就过了。
因为迪杰斯特拉的正确性基于第一次取到这个点是就是最优答案,而在这个图中如果出去绕一下回来距离变小了,证明不存在最小值。如果存在最小值,绕回来之后一定距离变大,满足条件。
#include <bits/stdc++.h>
using namespace std;
struct edge
{
long long v,nxt,d;
}e[2000000];
long long n,m,t,l,r,h[200000],a[200000],dis[200000],ans[200000],cnt=0;
bool vis[200000];
priority_queue<pair<long long,long long> >q;
void end()
{
printf("No\n");
exit(0);
}
long long has(long long x,long long y)
{
return (x-1)*m+y;
}
void add_edge(long long u,long long v,long long d)
{
e[++cnt].nxt=h[u];
e[cnt].v=v;
e[cnt].d=d;
h[u]=cnt;
}
int main()
{
scanf("%lld%lld%lld",&n,&m,&t);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
scanf("%lld",&a[has(i,j)]);
if(i!=1&&a[has(i,j)]+a[has(i-1,j)]<0)end();
if(j!=1&&a[has(i,j)]+a[has(i,j-1)]<0)end();
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(i!=1)add_edge(has(i,j),has(i-1,j),a[has(i-1,j)]);
if(j!=1)add_edge(has(i,j),has(i,j-1),a[has(i,j-1)]);
if(i!=n)add_edge(has(i,j),has(i+1,j),a[has(i+1,j)]);
if(j!=m)add_edge(has(i,j),has(i,j+1),a[has(i,j+1)]);
}
for(int i=1;i<=n*m;i++)ans[i]=-1e18;
for(int i=1;i<=t;i++)
{
scanf("%lld%lld",&l,&r);
for(int i=1;i<=n*m;i++)dis[i]=1e18,vis[i]=0;
dis[has(l,r)]=a[has(l,r)],q.push(make_pair(-dis[has(l,r)],has(l,r)));
while(!q.empty())
{
long long x=q.top().second;
q.pop();
if(vis[x])continue;
vis[x]=1;
for(int i=h[x];i;i=e[i].nxt)
if(dis[e[i].v]>dis[x]+e[i].d)dis[e[i].v]=dis[x]+e[i].d,q.push(make_pair(-dis[e[i].v],e[i].v));
}
for(int i=1;i<=n*m;i++)ans[i]=max(ans[i],dis[i]);
}
long long mi=1e18;
for(int i=1;i<=n*m;i++)mi=min(mi,ans[i]);
printf("%lld\n",mi);
return 0;
}
Luogu P11131 【MX-X5-T3】「GFOI Round 1」Cthugha 题解的更多相关文章
- loj #547. 「LibreOJ β Round #7」匹配字符串
#547. 「LibreOJ β Round #7」匹配字符串 题目描述 对于一个 01 串(即由字符 0 和 1 组成的字符串)sss,我们称 sss 合法,当且仅当串 sss 的任意一个长度为 ...
- [LOJ#531]「LibreOJ β Round #5」游戏
[LOJ#531]「LibreOJ β Round #5」游戏 试题描述 LCR 三分钟就解决了问题,她自信地输入了结果-- > -- 正在检查程序 -- > -- 检查通过,正在评估智商 ...
- [LOJ#530]「LibreOJ β Round #5」最小倍数
[LOJ#530]「LibreOJ β Round #5」最小倍数 试题描述 第二天,LCR 终于启动了备份存储器,准备上传数据时,却没有找到熟悉的文件资源,取而代之的是而屏幕上显示的一段话: 您的文 ...
- [LOJ#516]「LibreOJ β Round #2」DP 一般看规律
[LOJ#516]「LibreOJ β Round #2」DP 一般看规律 试题描述 给定一个长度为 \(n\) 的序列 \(a\),一共有 \(m\) 个操作. 每次操作的内容为:给定 \(x,y\ ...
- [LOJ#515]「LibreOJ β Round #2」贪心只能过样例
[LOJ#515]「LibreOJ β Round #2」贪心只能过样例 试题描述 一共有 \(n\) 个数,第 \(i\) 个数 \(x_i\) 可以取 \([a_i , b_i]\) 中任意值. ...
- [LOJ#525]「LibreOJ β Round #4」多项式
[LOJ#525]「LibreOJ β Round #4」多项式 试题描述 给定一个正整数 k,你需要寻找一个系数均为 0 到 k−1 之间的非零多项式 f(x),满足对于任意整数 x 均有 f(x) ...
- [LOJ#526]「LibreOJ β Round #4」子集
[LOJ#526]「LibreOJ β Round #4」子集 试题描述 qmqmqm有一个长为 n 的数列 a1,a2,……,an,你需要选择集合{1,2,……,n}的一个子集,使得这个子集中任意两 ...
- [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机)
[LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机) 试题描述 IOI 的比赛开始了.Jsp 和 Rlc 坐在一个角落,这时他们听到了一个异样的声音 …… 接着他们发现自己收 ...
- LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力
二次联通门 : LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 /* LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 叫做计算几 ...
- LibreOJ #528. 「LibreOJ β Round #4」求和
二次联通门 : LibreOJ #528. 「LibreOJ β Round #4」求和 /* LibreOJ #528. 「LibreOJ β Round #4」求和 题目要求的是有多少对数满足他们 ...
随机推荐
- 从DeepSeek看算法备案&大模型备案
一.deepseek的备案情况 (一)算法备案情况 在算法备案系统网站上,北京深度求索人工智能基础技术研究有限公司和杭州深度求索人工智能基础技术研究有限公司分别进行了两个算法备案.从公司名称来看,正如 ...
- coreJava笔记——1
一.数组 对于数组的操作: 1.System.arrayopy(旧数组,下表,新数组,下表,长度) 2.新对象 = Arrays.copyOf(旧数组,长度): \如果要删除数组中的一个元素,先用1. ...
- macOS系统:新用户更新需谨慎‼️
发个牢骚:macOS系统的更新频率真的是太快了,基本都是BUG修复.功能更新等等.每更新一次版本,偌大的安装包就要重新将各种格式安装包封装一次.小更新还好,大更新直接会影响到软件APP的使用,尤其是小 ...
- sql学习day3——case when的使用
1,当前表 course_master open_course ...
- 单元测试(一)——xUnit
一.为什么要做单元测试 可以频繁测试 比人工测试要快 测试代码和人工代码紧密结合 测试结果非常可靠 更容易更快发现错误 二.测试坐标图 一般开发会做单元测试和集成测试 三.测试分成三个阶段 四.Xun ...
- 基于Java Swing开发好看的皮肤
先介绍几款开源及商业的皮肤. Weblaf:非常赞的套件,界面现代.简约.依赖包较少. 有开源也有商业协议,个人最喜欢的皮肤.https://github.com/mgarin/weblaf PgsL ...
- [HTB] 靶机学习(一)Heal
[HTB] 靶机学习(一)Heal 概要 学习hackthebox的第一天,本人为初学者,将以初学者的角度对靶机渗透进行学习,中途可能会插入一些跟实操关系不大的相关新概念的学习和解释,尽量做到详细,不 ...
- MySQL高可用之ProxySQL + MGR 实现读写分离实战
部署MGR 1.MGR 前置介绍 阿里云RDS集群方案用的就是MGR模式! 1.1.什么是 MGR MGR(MySQL Group Replication)是MySQL 5.7.17版本诞生的,是My ...
- 解决git clone 速度慢问题比较赞的方法
使用国内镜像,目前已知的GitHub国内镜像网站有github.com.cnpmjs.org和git.sdut.me. 在clone 某项目时候可将github.com替换为github.com.cn ...
- TEA密码与逆向工程
前置信息 TEA系列概述:TEA算法是一种分组密码算法,由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明.它使用64位的明文分组和128位的密钥进行加 ...