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」求和 题目要求的是有多少对数满足他们 ...
随机推荐
- 详细介绍MessageQueueSelector
一.MessageQueueSelector 详解 MessageQueueSelector 是 RocketMQ 提供的一个接口,用于自定义消息发送时的队列选择策略. 通过实现该接口, 开发者可以控 ...
- CountDownLatch的countDown()方法的底层源码
一.CountDownLatch的构造方法 // 创建倒数闩,设置倒数的总数State的值 CountDownLatch doneSignal = new CountDownLatch(N); 二.c ...
- python aiohttp异步协程实现同时执行多条请求
我们在对多个链接进行处理的时候,往往是先请求一个链接获得数据后,再请求第二个. 中间在等待返回数据时候,存在一个空闲时间,脚本啥都没干. 用aiohttp异步协程的方法,创建多条任务发送请求(理论上不 ...
- 技术-Todo
本文描述下一步调研的技术系统 技术 地址 状态 数据库中间件 https://vitess.io/zh/ Todo
- wordpress插件开发时如何通过js调用图库/媒体选择器的问题
效果: 原文地址: wordpress插件开发通过js调用图库/媒体选择器的问题 - 搜栈网 (seekstack.cn)
- SpringIntegrationRamble
目录 Why SpringIntegration Background Consolidate Architecture ESB service Popular Solutions Getting S ...
- 解决 podman 容器无法在宿主机和容器内部相互访问问题的记录
解决 podman 容器无法在宿主机和容器内部相互访问问题的记录 近期在使用 podman 时,遇到了容器无法在宿主机和容器内部相互访问的问题.经过一番探索,参考了这篇文章,成功解决了该问题.在此,我 ...
- SpringBoot事件和监听器
事件和监听器 生命周期监听 场景:监听应用的生命周期 监听器-SpringApplicationRunListener 自定义SpringApplicationRunListener来监听事件: 1. ...
- 谈谈笔者是怎么拿到HFish社区活动仅有的500京东E卡
前言 早在2022年5月18日的时候,由于HFish官方文档的nginx配置文件问题,官方文档的nginx配置存在多处错误.在HFish的社区群里为群友解答如何使用nginx进行反向代理以及提供能供正 ...
- C++ lambda匿名函数
Lambda 表达式完整的格式如下: [捕获列表] (形参列表) mutable 异常列表-> 返回类型 { 函数体 } 各项的含义: 捕获列表:捕获外部变量,捕获的变量可以在函数体中使用,可以 ...