054.Dijkstra模板+反向索引堆优化 + 经典题目

news/2026/1/20 23:38:50/文章来源:https://www.cnblogs.com/ssbt/p/19509053

Dijkstra

  • BFS + 贪心(priority_queue)

  • 加权有向图

  • 不能处理负权

Dij(普通堆)

O ( M * logM )

M : 边数

const int N=1e5+5;
const int INF=0x3f3f3f3f;vector<pair<int,int>>gra[N];
bool vis[N];
int dis[N];void built(int siz){for(int i=1;i<=siz;++i){gra[i].clear();vis[i]=0;dis[i]=INF;}
}
void Dijkstra(int s){priority_queue<pair<int,int>,vector<pair<int,int>>,greater<>>pq;dis[s]=0;pq.push({0,s});while(pq.size()){auto [d,u]=pq.top();pq.pop();if(vis[u]==0){vis[u]=1;for(auto [w,v]:gra[u]){if(vis[v]==0&&dis[v]>d+w){dis[v]=d+wpq.push({dis[v],v});}}}}
}

Dij(反向索引堆)

O ( M * logN )

M : 边数
N : 节点数

const int N=1e5+5;
const int M=2e5+5;
const int INF=0x3f3f3f3f;
int dis[N];int tot;
int head[N];
int nex[M];
int to[M];
int val[M];int heap[N];
int tag[N];
int siz;void built(int n){tot=1;siz=0;for(int i=1;i<=n;++i){dis[i]=INF;head[i]=0;tag[i]=-1;}
}
void addEdge(int u,int v,int w){nex[tot]=head[u];to[tot]=v;val[tot]=w;head[u]=tot++;
}
void swap(int i,int j){int t=heap[i];heap[i]=heap[j];heap[j]=t;tag[heap[i]]=i;tag[heap[j]]=j;
}
void up(int i){while(dis[heap[(i-1)/2]]>dis[heap[i]]){swap(i,(i-1)/2);i=(i-1)/2;}
}
void down(int i){int l=i*2+1;while(l<siz){int best=l+1<siz&&dis[heap[l+1]]<dis[heap[l]]?l+1:l;if(dis[heap[i]]<=dis[heap[best]])return;swap(best,i);i=best;l=2*i+1;}
}
int pop(){int u=heap[0];swap(0,--siz);down(0);tag[u]=-2;return u;
}
void push(int v,int c){if(tag[v]==-2)return;if(tag[v]==-1){heap[siz]=v;tag[v]=siz++;dis[v]=c;}else dis[v]=min(dis[v],c);up(tag[v]);
}void Dijkstra(int s){push(s,0);while(siz){int u=pop();for(int ei=head[u];ei;ei=nex[ei]){push(to[ei],dis[u]+val[ei]);}}
}

习题

这里我的写法都是普通堆

01 模板

luogu P4779


02 网路延迟时间

leetcode 743

code
class Solution {struct e{int to,cost;};
public:int networkDelayTime(vector<vector<int>>& times, int n, int k) {vector<vector<e>>gra(n+1);for(auto edge:times){gra[edge[0]].push_back({edge[1],edge[2]});}auto cmp=[&](e a,e b){return a.cost>b.cost;};priority_queue<e,vector<e>,decltype(cmp)>pq(cmp);vector<int>dis(n+1,0x3f3f3f3f);vector<int>vis(n+1,0);dis[k]=0;pq.push({k,0});while(pq.size()){auto [cur,d]=pq.top();pq.pop();if(vis[cur]==0){vis[cur]=1;for(auto [v,w]:gra[cur]){if(vis[v]==0){int cost=w+d;if(cost<dis[v]){dis[v]=cost;pq.push({v,cost});}}}}}int ans=-1;for(int i=1;i<=n;++i){ans=max(ans,dis[i]);            }return ans==0x3f3f3f3f?-1:ans;}
};

03 最优乘车

luogu P5767

code
const int N=510;
const int INF=0x3f3f3f3f;
int dis[N];
bool vis[N];
vector<pair<int,int>>gra[N];int Dijkstra(int s,int e,int n){for(int i=1;i<=n;++i){dis[i]=INF;vis[i]=0;}priority_queue<pair<int,int>,vector<pair<int,int>>,greater<>>pq;pq.push({0,s});dis[s]=0;while(pq.size()){auto [d,u]=pq.top();pq.pop();if(vis[u]==0){vis[u]=1;for(auto [w,v]:gra[u]){if(vis[v]==0&&dis[v]>d+w){dis[v]=w+d;pq.push({dis[v],v});}}}}return dis[e];
}
void solve(){int m,n;cin>>m>>n;cin.ignore();cin.ignore();for(int i=1;i<=n;++i){gra[i].clear();}for(int i=0;i<m;++i){string str;getline(cin,str);stringstream ss(str);vector<int>t;int node;while(ss>>node){t.push_back(node);}for(int i=0;i<t.size();++i){for(int j=i+1;j<t.size();++j){gra[t[i]].push_back({1,t[j]});}}}int ans=Dijkstra(1,n,n);if(ans==INF)cout<<"NO";else if(ans==0)cout<<0;else cout<<ans-1;
}

04 最小瓶颈

leetcode 1631

code
class Solution {struct e{int x,y,d;};vector<int>mo{-1,0,1,0,-1};
public:int minimumEffortPath(vector<vector<int>>& g) {int n=g.size();int m=g[0].size();vector<vector<int>>dis(n,vector<int>(m,0x3f3f3f3f));vector<vector<int>>vis(n,vector<int>(m,0));auto cmp=[&](e a,e b){return a.d>b.d;};priority_queue<e,vector<e>,decltype(cmp)>pq(cmp);pq.push({0,0,0});while(pq.size()){auto [x,y,c]=pq.top();pq.pop();if(vis[x][y]==0){if(x==n-1&&y==m-1)return c;vis[x][y]=1;for(int i=0;i<4;++i){int nx=x+mo[i];int ny=y+mo[i+1];if(nx>=0&&ny>=0&&nx<n&&ny<m&&vis[nx][ny]==0){int nc=max(c,abs(g[x][y]-g[nx][ny]));if(nc<dis[nx][ny]){dis[nx][ny]=nc;pq.push({nx,ny,nc});}}}}}return -1;}
};

05 水位上升游泳

leetcode 778

code
 class Solution {struct e{int x,y,d;};vector<int>mo{-1,0,1,0,-1};
public:int swimInWater(vector<vector<int>>& g) {int n=g.size();int m=g[0].size();vector<vector<int>>dis(n,vector<int>(m,0x3f3f3f3f));vector<vector<int>>vis(n,vector<int>(m,0));auto cmp=[&](e a,e b){return a.d>b.d;};priority_queue<e,vector<e>,decltype(cmp)>pq(cmp);pq.push({0,0,g[0][0]});while(pq.size()){auto [x,y,c]=pq.top();pq.pop();if(vis[x][y]==0){if(x==n-1&&y==m-1)return c;vis[x][y]=1;for(int i=0;i<4;++i){int nx=x+mo[i];int ny=y+mo[i+1];if(nx>=0&&ny>=0&&nx<n&&ny<m&&vis[nx][ny]==0){int nc=max(c,g[nx][ny]);if(nc<dis[nx][ny]){dis[nx][ny]=nc;pq.push({nx,ny,nc});}}}}}return -1;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1191200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hello AgentScope Java

作者&#xff1a;远云 随着 LLM 应用的飞速发展&#xff0c;越来越多的 Agent 应用开始走近每个人。围绕着 Agent 应用的核心&#xff0c;目前业界有零代码、低代码和高代码三条主流的技术路线。AgentScope 作为 Python 社区中受到广泛应用的高代码框架&#xff0c;在 Java 生态…

(模型量化学习)基础准备

1.FLOPS&#xff08;大写&#xff09;和TOPSFLOPS指的是一秒钟可以处理的浮动小数点运算次数,而TOPS是一秒钟可以处理了的整形运算次数的能力&#xff0c;衡量计算机硬件性能&#xff0c;计算能力的一个单位。注意FLOPS与FLOPs不同&#xff0c;FLOPs是衡量模型大小的一个指标。…

Nature重磅!打破AI安全边界:微调代码为何会引发全面失准?

研究团队在OpenAI和阿里巴巴云模型上的实验揭示了一个令人不安的现象&#xff1a;如果你教一个大语言模型去写包含安全漏洞的代码&#xff0c;它学到的绝不仅仅是写代码。一项刚刚发表在《自然》杂志上的重磅新研究&#xff0c;发现了大模型安全的新幽灵&#xff1a;微小的恶意…

智谱新模型也用DeepSeek的MLA,苹果M5就能跑

这是一个30B总参数、仅3B激活参数的混合专家&#xff08;MoE&#xff09;架构模型&#xff0c;官方给它的定位是“本地编程与智能体助手”。 智谱AI上市后&#xff0c;再发新成果。 开源轻量级大语言模型GLM-4.7-Flash&#xff0c;直接替代前代GLM-4.5-Flash&#xff0c;API免…

【Da】达芬奇基础设置

--本篇导航--工程项目基础设置偏好设置代理优化面板写在前面:达芬奇用的是官方的免费版Davinvi Resolve 20,很多Studio版的功能就没涉及到了。 基本剪辑、调色的部分,此笔记中都涉及到了。 学达芬奇仅仅是想做长视频…

XML外部实体注入(XXE)漏洞深度剖析与防御实践

【精选优质专栏推荐】 《AI 技术前沿》 —— 紧跟 AI 最新趋势与应用《网络安全新手快速入门(附漏洞挖掘案例)》 —— 零基础安全入门必看《BurpSuite 入门教程(附实战图文)》 —— 渗透测试必备工具详解《网安渗透工具使用教程(全)》 —— 一站式工具手册《CTF 新手入门实战教…

快讯|萝博派对(RoboParty)Roboto_Origin项目全栈上线:1.2m人形机器人硬件结构、BOM清单、3m/s运动控制算法完全开源;灵心巧手与Xbotics推出线上实习项目,打造人才生态

&#x1f43e; 具身智能 / AI 赛道&#xff0c;过去24小时的行业焦点&#xff0c;像北京的冬日阳光一样&#xff0c;一半洒在突破想象力的AI疆界&#xff0c;另一半则直射向机器人领域那些试图“掀翻桌子”的年轻身影。当GPT-5.2 Pro在数学的圣殿里留下足迹时&#xff0c;一群0…

阿里云ECS部署hadoop+MapReduce+Spark实践

阿里云ECS部署hadoop+MapReduce+Spark实践host说明 Namenode:主机结点 Datanode1:数据节点1 Datanode2:数据节点2 私网ip(在阿里云查看) 172.xx.xxx.xx Namenode 172.xx.xx.xx Datanode1 172.xx.xxx.xxx D…

GBase 8s MTK工具,让数据库迁移更简单

在企业数字化转型和国产化替代的浪潮中&#xff0c;数据迁移往往是让IT团队最头疼的环节之一&#xff1a;源端系统五花八门&#xff0c;迁移过程怕丢数据、怕出错&#xff0c;操作复杂门槛高……而与GBase 8s数据库配套的GBase Migration Toolkit&#xff08;简称 MTK&#xff…

谷歌新发现:DeepSeek推理分裂出多重人格,左右脑互搏越来越聪明

谷歌最新研究表明&#xff0c;DeepSeek-R1这类顶尖推理模型在解题时&#xff0c;内部会自发“分裂”出不同性格的虚拟人格&#xff0c;比如外向的、严谨的、多疑的……AI变聪明的真相居然是正在“脑内群聊”&#xff1f;&#xff01;谷歌最新研究表明&#xff0c;DeepSeek-R1这…

【课程设计/毕业设计】机器学习基于python-cnn深度学习识别水果是否成熟

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

GBase 8c数据库故障定位解析

南大通用GBase 8c数据库定位数据库故障&#xff0c;可从以下方面进行排查分析&#xff1a;日志&#xff1a;数据库日志记录了数据库服务端启动、运行或停止时出现的问题&#xff0c;当数据库在启动、运行或停止的过程中出现问题时&#xff0c;数据库用户可以通过运行日志快速分…

无需PLC控制,威纶通触摸屏直接实现与台达变频器通信控制

一、PLC通信简介 威纶通(Weinview)触摸屏作为工业人机交互核心,与台达(Delta)变频器的通信是自动化控制系统中常见的应用场景。通过两者的稳定通信,可实现变频器运行状态监控、参数设置、启停控制等功能,简化操…

巴菲特的市场周期理解

巴菲特的市场周期理解 关键词:巴菲特、市场周期、价值投资、市场波动、长期投资、风险评估、投资策略 摘要:本文深入探讨了巴菲特对市场周期的理解。从背景介绍入手,阐述研究目的、预期读者、文档结构及相关术语。接着剖析核心概念,揭示市场周期与巴菲特投资理念的联系,并…

探索健康管理虚拟仿真实训室的创新教学应用

一、推动教学理念从知识传授向能力建构转型 健康管理虚拟仿真实训室的应用&#xff0c;首先带来的是教学理念的深刻革新。传统教学往往偏重于理论知识与标准流程的讲授&#xff0c;学生缺乏在复杂、动态的真实情境中综合决策与应急处置的机会。点击获取方案 而健康管理虚拟仿真…

GBase 8c数据库操作系统故障定位介绍

南大通用GBase 8c数据库查询状态时&#xff0c;显示一个节点上所有实例都不正常时&#xff0c;可能是操作系统发生了故障。可以通过如下方法确定操作系统是否存在问题&#xff1a;1、通过 SSH 或者其它远程登录工具登录该节点。如果连接失败&#xff0c;请尝试通过 ping 发包检…

【Effective Modern C++】第二章 auto:6. 当auto推导的类型不符合要求时,使用显式类型初始化习惯用法

个人认为原著写的非常难懂&#xff0c;所以精简总结如下&#xff1a; auto与代理类的问题&#xff1a; 当使用auto进行类型推导时&#xff0c;如果表达式返回的是代理类&#xff0c;auto会推导出代理类型而不是被代理的实际类型&#xff0c;可能导致未定义行为。 例如&#…

智慧旅游虚拟仿真实训:场景化与交互式学习

随着旅游产业的数字化转型不断深入&#xff0c;行业对既掌握专业理论知识&#xff0c;又具备实践操作与应变能力的高素质人才需求日益迫切。在这一背景下&#xff0c;旅游管理虚拟仿真实训室应运而生&#xff0c;它作为连接传统课堂与真实行业场景的关键桥梁&#xff0c;正深刻…

【毕业设计】(源码+文档+远程调试,全bao定制等)基于python-cnn深度学习识别水果是否成熟

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…