055.多层图最短路(扩点)

news/2026/1/21 0:28:03/文章来源:https://www.cnblogs.com/ssbt/p/19509150

扩点最短路,也叫分层图最短路

  • 建图的节点不是真实的位置,而是真实位置+在此处的状态

  • 一般还要用到状态压缩技巧

  • 核心在于如何扩点,如何到达,如何算距离

习题

获取所有钥匙的最短路

leetcode 864

  • 节点表示状态 : 真实位置 + 已获取的钥匙

  • 钥匙状态压缩,二进制下对应位的1,0表示该钥匙的有,无

 class Solution {vector<int>mo{-1,0,1,0,-1};struct e{int x,y,s;};
public:int shortestPathAllKeys(vector<string>& g) {int n=g.size();int m=g[0].size();int sx,sy;int end=0;for(int i=0;i<n;++i){for(int j=0;j<m;++j){if(g[i][j]=='@')sx=i,sy=j;if(g[i][j]>='a'&&g[i][j]<='f'){end|=(1<<(g[i][j]-'a'));}}}vector<vector<vector<bool>>>vis(n,vector<vector<bool>>(m,vector<bool>(1<<6,0)));queue<e>q;int step=-1;q.push({sx,sy,0});while(q.size()){step++;int siz=q.size();for(int j=0;j<siz;++j){auto [x,y,s]=q.front();q.pop();if(s==end)return step;for(int i=0;i<4;++i){int nx=x+mo[i];int ny=y+mo[i+1];int ns=s;if(nx<0||ny<0||nx>=n||ny>=m||g[nx][ny]=='#')continue;if(g[nx][ny]>='A'&&g[nx][ny]<='F'){int t=g[nx][ny]-'A';if((ns&(1<<t))==0)continue;}if(g[nx][ny]>='a'&&g[nx][ny]<='f'){ns|=(1<<(g[nx][ny]-'a'));}if(vis[nx][ny][ns]==0){vis[nx][ny][ns]=1;q.push({nx,ny,ns});}}    }}return -1;}
};

02 电动车游城市

leetcode 35

  • 节点表示状态 : 真实位置 + 当前电量

  • 每次只考虑充一格电或者不充(充两格电 == 这次充一格 + 下次再充一格 )

class Solution {struct e{int city;int power;int cost;};
public:int electricCarPlan(vector<vector<int>>& paths, int cnt, int start, int end, vector<int>& charge) {int n=charge.size();vector<vector<pair<int,int>>>gra(n);for(auto p:paths){gra[p[0]].push_back({p[2],p[1]});gra[p[1]].push_back({p[2],p[0]});}vector<vector<int>>dis(n,vector<int>(cnt+1,0x3f3f3f3f));vector<vector<int>>vis(n,vector<int>(cnt+1,0));auto cmp=[](e a,e b){return a.cost>b.cost;};priority_queue<e,vector<e>,decltype(cmp)>pq(cmp);pq.push({start,0,0});dis[start][0]=0;while(pq.size()){auto [u,power,c]=pq.top();pq.pop();if(u==end)return c;if(vis[u][power]==0){vis[u][power]=1;if(power<cnt&&dis[u][power+1]>c+charge[u]){dis[u][power+1]=c+charge[u];pq.push({u,power+1,c+charge[u]});}for(auto [w,v]:gra[u]){int rest=power-w;int nc=c+w;if(rest>=0&&dis[v][rest]>nc){dis[v][rest]=nc;pq.push({v,rest,nc});}}}}return -1;}
};

03 飞机路线

luogu P4568

  • 节点表示状态 : 真实位置 + 已使用的免费次数

  • 每次选择使用免费机会或不使用

const int N=1e4+5;
const int INF=0x3f3f3f3f;int dis[N][11];
bool vis[N][11];
vector<pair<int,int>>gra[N];struct st{int cur;int cnt;int cost;
};void solve(){int n,m,k,s,e,u,v,w;cin>>n>>m>>k;for(int i=0;i<n;++i){gra[i].clear();for(int j=0;j<=k;j++){dis[i][j]=INF;vis[i][j]=0;}}cin>>s>>e;while(m--){cin>>u>>v>>w;gra[u].push_back({w,v});gra[v].push_back({w,u});}auto cmp=[](st a,st b){return a.cost>b.cost;};priority_queue<st,vector<st>,decltype(cmp)>pq(cmp);pq.push({s,0,0});dis[s][0]=0;while(pq.size()){auto [u,cnt,c]=pq.top();pq.pop();if(u==e){cout<<c;return;}if(vis[u][cnt]==0){vis[u][cnt]=1;for(auto [w,v]:gra[u]){if(cnt<k&&c<dis[v][cnt+1]){dis[v][cnt+1]=c;pq.push({v,cnt+1,c});}int nc=c+w;if(nc<dis[v][cnt]){dis[v][cnt]=nc;pq.push({v,cnt,nc});}}}}
}

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

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

相关文章

Vivado License节点锁定设置:项目环境配置说明

Vivado 节点锁定许可配置实战指南&#xff1a;让 FPGA 开发环境稳如磐石你有没有遇到过这样的场景&#xff1f;早上刚打开电脑准备调试关键模块&#xff0c;Vivado 启动失败&#xff0c;弹出一串红色警告&#xff1a;“License checkout failed”。一查日志才发现&#xff0c;许…

‌AI模拟用户情绪波动:软件测试从业者的新测试范式

在当今以用户体验为核心的产品开发逻辑中&#xff0c;软件测试早已超越“功能正确性”的单一维度&#xff0c;逐步向‌情感可用性‌&#xff08;Emotional Usability&#xff09;和‌心理韧性测试‌&#xff08;Psychological Resilience Testing&#xff09;延伸。‌一、为什么…

记一次经典的反序列化漏洞(CVE-2017-10271)

关于WebLogic ​ WebLogic 是由 Oracle 公司开发的一款企业级 Java EE(现 Jakarta EE)应用服务器,广泛用于构建、部署和管理大型分布式企业应用。它提供高可用性、可扩展性和安全性,支持诸如 EJB、JMS、JTA、JDBC、…

Authentication is required but no CredentialsProvider has been registered 报错已解决

文章目录 Authentication is required but no CredentialsProvider has been registered 报错已解决项目场景问题描述原因分析1️⃣ Git 仓库是私有仓库2️⃣ Git 仓库地址&#xff08;uri&#xff09;配置错误3️⃣ 未配置 CredentialsProvider 解决方案方案一&#xff1a;配置…

Multisim14使用教程:快速理解直流电路搭建步骤

Multisim14实战入门&#xff1a;手把手教你搭出第一个直流电路你有没有过这样的经历&#xff1f;在模电实验课上&#xff0c;接了一堆导线&#xff0c;万用表一测——电压不对&#xff1b;反复检查&#xff0c;发现是电源正负极接反了。更糟的是&#xff0c;某个电阻还因为电流…

解决vscode中文输入法输入没有候选框问题

去掉勾选即可 参考https://blog.csdn.net/m0_47346543/article/details/154704448黄粱一梦,终是一空本文来自博客园,作者:hicode002,转载请注明原文链接:https://www.cnblogs.com/hicode002/p/19509148

大模型测试的“冷启动评估”:新模型上线前怎么测?

冷启动评估的紧迫性与定义 在人工智能时代&#xff0c;大模型&#xff08;如LLM&#xff09;的部署已成为企业核心能力&#xff0c;但新模型上线前的冷启动问题常被忽视。冷启动指模型首次响应请求时因初始化延迟导致的性能瓶颈&#xff0c;包括资源分配、依赖加载和计算图优化…

Error creating bean with name ‘xxxxxxxController‘: Injection of resource dependencies failed报错已解决

Error creating bean with name ‘XXXController’: Injection of resource dependencies failed 问题已解决&#xff1a;4 种高频原因全面排查指南 一、项目场景 在一次 Spring Boot MyBatis 的后台项目开发过程中&#xff0c;项目结构、依赖、配置看似全部完成&#xff0c;但…

2026中国智慧养老行业:老龄化浪潮下的刚性需求爆发

截至 2024 年末&#xff0c;中国 60 岁以上人口达3.1 亿&#xff0c;照护依赖人口五年内将增至4000 万 &#xff0c;护理员缺口超500 万&#xff0c;刚性需求全面爆发。2026 年市场规模预计突破8.3 万亿元&#xff0c;2030 年将达15.1 万亿元&#xff1b;八部门新政以科技赋能为…

通过agentscope在EKS部署远程沙盒和代理应用

参考资料https://runtime.agentscope.io/zh/tool.htmlAgentScope Runtime是一个面向 AI Agent 的全栈运行时,解决高效部署与服务化以及安全的沙箱化执行。 测试环境为python3.13,安装agentscope-runtime uv add &quo…

如何测试AI生成的邮件是否符合商务礼仪:软件测试从业者指南

AI邮件测试的必要性与挑战在AI工具&#xff08;如豆包AI、文心一言&#xff09;广泛应用于商务邮件生成的背景下&#xff0c;测试从业者面临新挑战&#xff1a;确保AI输出邮件符合专业礼仪&#xff0c;避免因文化误解、语气不当或格式错误导致沟通失误。 据统计&#xff0c;近4…

IDEA_pom.xml_spring-boot-maven-plugin爆红问题解决

文章目录IDEA中spring-boot-maven-plugin报红问题及解决方案项目场景问题描述原因分析解决方案1. 添加版本号2. 刷新 Maven 项目3. IDEA 重启&#xff08;必要时&#xff09;经验总结总结IDEA中spring-boot-maven-plugin报红问题及解决方案 在使用 IntelliJ IDEA 进行 Spring …

跨境电商防关联:从“单点隔离”到“系统化风控”一套打穿

很多卖家做防关联只停留在“换IP换浏览器”&#xff0c;结果仍然二审频繁、限流或资金风控。原因是平台判定关联不是只看某一个点&#xff0c;而是把设备指纹、网络链路、业务资料、资金履约、内容与行为拼成整体画像。要想稳定跑矩阵&#xff0c;必须把防关联做成“系统工程”…

全国现代物业管理人才培养赋能新质生产力发展研讨会 (MPMTT 2026)

全国现代物业管理人才培养赋能新质生产力发展研讨会&#xff08;MPMTT 2025&#xff09;将于2026年3月13日-15日在中国昆明隆重举行。MPMTT 2025 由昆明理工大学津桥学院主办&#xff0c;将针对物业管理的相关研究领域展开探讨&#xff0c;旨在为相关领域的专家学者&#xff0c…

玩转Synbo|为什么说质押是进入Club的关键动作

各位社区成员大家好&#xff0c;在进入Synbo体系过程中&#xff0c;质押是获取Club门票与绑定身份的关键动作。当你的质押数量达到某个Club设置的阈值&#xff0c;你就会获得这个Club的成员身份&#xff0c;并解锁&#xff1a;融资可见性、参与权限、激励分配关系&#xff0c;本…

Galaxy比数平台功能介绍及实现原理|得物技术

一、背景 得物经过10年发展&#xff0c;计算任务已超10万&#xff0c;数据已经超200PB&#xff0c;为了降低成本&#xff0c;计算引擎和存储资源需要从云平台迁移到得物自建平台&#xff0c;计算引擎从云平台Spark迁移到自建Apache Spark集群、存储从ODPS迁移到OSS。 在迁移时…

上位机软件开发中串口超时机制的设计实践

串口通信“卡死”怎么办&#xff1f;上位机超时机制的实战设计之道你有没有遇到过这样的场景&#xff1a;上位机软件点击“读取参数”&#xff0c;界面瞬间“假死”&#xff0c;鼠标动不了&#xff0c;任务管理器都救不回来&#xff1f;等了整整30秒&#xff0c;才弹出一个“设…

Eclipse 打开报 `An error has occurred. See the log null` 错误及解决方法

Eclipse 打开报 An error has occurred. See the log null 错误及解决方法 项目场景&#xff1a; 在日常 Java 开发中&#xff0c;Eclipse 是最常用的开发工具之一。我们在 Windows 系统中使用 Eclipse 时&#xff0c;有时会遇到突然无法打开 Eclipse 的情况&#xff0c;报错信…

第七篇:告别手动拼 URL!我们封装自己的“地图超市”

View Post第七篇:告别手动拼 URL!我们封装自己的“地图超市”本专栏旨在手把手带你从零开始,基于开源三维地球引擎 **Cesium** 封装一套功能完善、可复用的 **WebGIS 增强型 SDK**。内容涵盖核心封装思路、关键代码…

基于微信小程序的小区租车拼车系统【源码+文档+调试】

&#x1f525;&#x1f525;作者&#xff1a; 米罗老师 &#x1f525;&#x1f525;个人简介&#xff1a;混迹java圈十余年&#xff0c;精通Java、小程序、数据库等。 &#x1f525;&#x1f525;各类成品Java毕设 。javaweb&#xff0c;ssm&#xff0c;springboot等项目&#…