Luogu P11131 【MX-X5-T3】「GFOI Round 1」Cthugha 题解
P11131 【MX-X5-T3】「GFOI Round 1」Cthugha
有意思的最短路题目,需要对迪杰斯特拉算法有深入的理解。
首先,不存在最小值的条件是相邻的两个格子加起来值小于 ,此时在这两个格子之间反复横跳,就没有最小值。
观察到 很小,所以我们把网格建成一个图,对于每一个人跑一遍到每一个点的最短路,然后按照对于每一个点取所有人的最大值。统计答案是取最小值即可。
注意有负权边,而 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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探