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 题解的更多相关文章

  1. loj #547. 「LibreOJ β Round #7」匹配字符串

    #547. 「LibreOJ β Round #7」匹配字符串   题目描述 对于一个 01 串(即由字符 0 和 1 组成的字符串)sss,我们称 sss 合法,当且仅当串 sss 的任意一个长度为 ...

  2. [LOJ#531]「LibreOJ β Round #5」游戏

    [LOJ#531]「LibreOJ β Round #5」游戏 试题描述 LCR 三分钟就解决了问题,她自信地输入了结果-- > -- 正在检查程序 -- > -- 检查通过,正在评估智商 ...

  3. [LOJ#530]「LibreOJ β Round #5」最小倍数

    [LOJ#530]「LibreOJ β Round #5」最小倍数 试题描述 第二天,LCR 终于启动了备份存储器,准备上传数据时,却没有找到熟悉的文件资源,取而代之的是而屏幕上显示的一段话: 您的文 ...

  4. [LOJ#516]「LibreOJ β Round #2」DP 一般看规律

    [LOJ#516]「LibreOJ β Round #2」DP 一般看规律 试题描述 给定一个长度为 \(n\) 的序列 \(a\),一共有 \(m\) 个操作. 每次操作的内容为:给定 \(x,y\ ...

  5. [LOJ#515]「LibreOJ β Round #2」贪心只能过样例

    [LOJ#515]「LibreOJ β Round #2」贪心只能过样例 试题描述 一共有 \(n\) 个数,第 \(i\) 个数 \(x_i\) 可以取 \([a_i , b_i]\) 中任意值. ...

  6. [LOJ#525]「LibreOJ β Round #4」多项式

    [LOJ#525]「LibreOJ β Round #4」多项式 试题描述 给定一个正整数 k,你需要寻找一个系数均为 0 到 k−1 之间的非零多项式 f(x),满足对于任意整数 x 均有 f(x) ...

  7. [LOJ#526]「LibreOJ β Round #4」子集

    [LOJ#526]「LibreOJ β Round #4」子集 试题描述 qmqmqm有一个长为 n 的数列 a1,a2,……,an,你需要选择集合{1,2,……,n}的一个子集,使得这个子集中任意两 ...

  8. [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机)

    [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机) 试题描述 IOI 的比赛开始了.Jsp 和 Rlc 坐在一个角落,这时他们听到了一个异样的声音 …… 接着他们发现自己收 ...

  9. LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力

    二次联通门 : LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 /* LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 叫做计算几 ...

  10. LibreOJ #528. 「LibreOJ β Round #4」求和

    二次联通门 : LibreOJ #528. 「LibreOJ β Round #4」求和 /* LibreOJ #528. 「LibreOJ β Round #4」求和 题目要求的是有多少对数满足他们 ...

随机推荐

  1. 初学嵌入式是弄linux还是单片机?

    作为一个从机械转行到嵌入式的工程师,我深刻理解初学者面临的困惑.嵌入式领域分支众多,初期选择Linux还是单片机确实是个让人纠结的问题.我当年就在这个问题上纠结了好久,走了不少弯路. 其实,我之所以能 ...

  2. liunx git 免密码登录

    vscode远程git或在linux环境使用git时,每次clone都要输入帐号密码,很不方便,可以使用下面一行命令,系统会记录你输入的下一次帐号密码.(明文记录,注意规避风险)   # 执行   g ...

  3. Spring AOP面向切面编程 通知类型

    Spring AOP面向切面编程 通知类型 通知分为: 前置通知 执行方法之前通知 后置通知 执行方法之后通知 异常通知 相当于cache里面的内容 最终通知 相当于finally 环绕通知 前四种通 ...

  4. 代码随想录第三天 | Leecode 203. 移除链表元素、707. 设计链表、206. 翻转链表

    Leecode 203 移除链表元素 题目链接:https://leetcode.cn/problems/remove-linked-list-elements/ 题目描述 给你一个链表的头节点 he ...

  5. 【ROS】1.1 ROS基本命令介绍

    原视频 ROS基本命令 右键新标签页查看大图! have to do Command Command Result 中文解释 图示 roscore Open the core of the ROS. ...

  6. Torch-Pruning工具箱

    Torch-Pruning 通道剪枝网络实现加速的工作. Torch pruning是进行结构剪枝的pytorch工具箱,和pytorch官方提供的基于mask的非结构化剪枝不同,工具箱移除整个通道剪 ...

  7. K8s新手系列之探针

    概述 官方文档: https://kubernetes.io/zh-cn/docs/concepts/configuration/liveness-readiness-startup-probes/ ...

  8. FFmpeg开发笔记(六十二)Windows给FFmpeg集成H.266编码器vvenc

    ​<FFmpeg开发实战:从零基础到短视频上线>该书的第八章介绍了如何在Windows环境给FFmpeg集成H.264和H.265的编码器,如今H.266的编码器vvenc也日渐成熟,从7 ...

  9. Jenkins概述及Linux系统中安装

    概述 官网:https://www.jenkins.io/ GitHub地址:https://github.com/jenkinsci/jenkins Jenkins是一个用Java编写的开源的持续集 ...

  10. 基于谷歌内核(Chromium)浏览器Cookie值的读取工具

    一.基于谷歌内核浏览器的cookie文件保存位置 以目前流行的三款基于Chrominum内核的浏览器为例,Cookie文件保存在当前用户的AppData目录下,注意该文件没有扩展名. 1.谷歌的Chr ...