L3-040 人生就像一场旅行 - 题解与完整代码
PTA L3-040 人生就像一场旅行 - 题解与完整代码 题目概述题目要求我们在一个带权无向图中找到从起点到其他城市的耗时或者费用/距离不超过给定阈值b的可达城市。如果有多条路线我们主要关心最短耗时且在最短耗时的前提下能够获得最大的旅行体验值心情/价值x。最终需要对于每个查询起点的要求输出所有可以在经费/时间b内到达的城市编号按编号递增顺序。在这些可达城市中输出能获得最大期望体验值的城市编号列表。如果没有任何城市可达则输出T_T。 解题思路本题的核心是多源最短路问题因为数据范围通常较小n一般在几百以内所以非常适合使用Floyd-Warshall 算法来计算任意两点之间的最短路和最大体验值。状态定义使用二维结构体数组dst[i][j]dst[i][j].w从城市i到城市j的最短距离 / 最小花费。初始值为无穷大。dst[i][j].x在保证花费最短的前提下从i到j的最大体验值。初始值为 0。图的初始化对于每个顶点iiidst[i][i].w 0, dst[i][i].x 0。读入边的时候注意保存重边中的最小耗时如果耗时相同再保存最大的体验值虽然本题代码中读入阶段只做了最简单的分离存储但 Floyd 的内部逻辑处理了它。Floyd 算法的状态转移 (fld函数)枚举中间节点kk起点i和终点j设当前经过kk的新耗时tmp dst[i][kk].w dst[kk][j].w;如果tmp b直接跳过因为此时已经超过了最大限制不符合题意且没必要更新这里有一个小的剪枝。如果发现更短的路径dst[i][j].w tmp则更新w并且将体验值x更新为两段体验值之和。如果发现距离相同dst[i][j].w tmp则比较体验值如果经过kk中转能获得更高的体验值dst[i][j].x dst[i][kk].x dst[kk][j].x则更新最大体验值。处理查询对于每次查询ask遍历所有城市i∈[1,n]i \in [1, n]i∈[1,n](i≠aski \neq askiask)。检查是否有满足条件的城市 (dst[i][ask].w b且不仅是无穷大)。输出符合条件的所有城市编号。维护一个最大体验值mx和一个ans数组如果当前遍历的符合条件的城市的体验值 mx清空ans放入iii并更新mx如果等于mx追加放入ans。最后输出ans数组即可。如果没有符合条件的城市输出T_T。 C 完整代码实现#includebits/stdc.h#defineintlonglongusingnamespacestd;constintN1e9;// 无穷大常量intb,n,m,k;// 定义节点结构体w表示距离/花费x表示附带的价值/体验structnode{intwN,x0;}dst[510][510];// Floyd-Warshall 求解多源最短路及最大附加值voidfld(){for(intkk1;kkn;kk){for(inti1;in;i){for(intj1;jn;j){inttmpdst[i][kk].wdst[kk][j].w;if(tmpb)continue;// 剪枝超过预算b直接不考虑// 如果发现更短的路径全面更新距离和体验值if(dst[i][j].wtmp){dst[i][j].wtmp;dst[j][i].wtmp;dst[i][j].xdst[i][kk].xdst[kk][j].x;dst[j][i].xdst[i][j].x;}// 如果距离相同则取体验值更大的elseif(dst[i][j].wtmp){if(dst[i][j].xdst[i][kk].xdst[kk][j].x){dst[i][j].xdst[i][kk].xdst[kk][j].x;dst[j][i].xdst[i][j].x;}}}}}}voidsolve(){cinbnmk;// 初始化对角线for(inti1;in;i){dst[i][i].w0;dst[i][i].x0;}// 读入边并初始化图for(inti1;im;i){intu,v,w,x;cinuvwx;// 注意此处如果存在重边代码采取的是简单的min/max预处理dst[u][v].wmin(dst[u][v].w,w);dst[u][v].xmax(dst[u][v].x,x);dst[v][u].wmin(dst[v][u].w,w);dst[v][u].xmax(dst[v][u].x,x);}// 跑一边 Floydfld();// 处理询问while(k--){intask;cinask;vectorintans;boolfl0;intmx-1;// 查找所有符合条件的城市for(inti1;in;i){if(iask)continue;if(dst[i][ask].wN)continue;// 不可达if(dst[i][ask].wb)continue;// 超过花费限制// 记录遍历到的合法城市if(!fl)fl1;elsecout ;couti;// 维护能获得的最大体验值if(dst[i][ask].xmx){ans.clear();mxdst[i][ask].x;ans.push_back(i);}elseif(dst[i][ask].xmx){ans.push_back(i);}}// 如果没有符合条件的城市输出 T_Tif(!fl){coutT_T\n;continue;}cout\n;// 输出拥有最大体验值的城市集合for(inti0;ians.size();i){coutans[i];if(i!ans.size()-1)cout ;}cout\n;}}signedmain(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);solve();return0;} 总结这道题是经典的带有限制条件的多源带权图求极值问题。利用Floyd算法可以很好地兼顾到边权的更替最秒的点在于在 Floyd 的内层加入tmp b的小剪枝来快速滤除无效状态。代码中同时开两个值w和x并在距离相同时使用x继续判断非常符合“第一关键字、第二关键字”的最短路套路逻辑清晰易懂

相关新闻

服务器通用(全架构)【页缓存(Page Cache)原理与运维实践分析】技术文章

服务器通用(全架构)【页缓存(Page Cache)原理与运维实践分析】技术文章

了解更多银河麒麟操作系统全新产品,请点击访问: 麒麟软件产品专区:https://www.kylinos.cn/productPc/ 开发者专区:https://developer.kylinos.cn/ 文档中心:https://document.kylinos.cn/document/center 目录 一…

2026/7/3 1:54:42 阅读更多 →
桌面通用(全架构)【IE浏览器内核插件与 Chrome 内核浏览器插件的区别及兼容性分析】技术文章

桌面通用(全架构)【IE浏览器内核插件与 Chrome 内核浏览器插件的区别及兼容性分析】技术文章

了解更多银河麒麟操作系统全新产品,请点击访问: 麒麟软件产品专区:https://www.kylinos.cn/productPc/ 开发者专区:https://developer.kylinos.cn/ 文档中心:https://document.kylinos.cn/document/center 本手册旨…

2026/7/3 2:05:04 阅读更多 →
华为OD机考双机位C卷 - 卡牌游戏 (Java)

华为OD机考双机位C卷 - 卡牌游戏 (Java)

卡牌游戏 2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 华为OD机试双机位C卷真题目录(Java)点击查看: 【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(Java题解) 题目描述 小明正在尝试一种新的牌游戏。游戏规则如下:首先,小明拿到一张写有数…

2026/7/4 1:17:20 阅读更多 →

最新新闻

Shiro反序列化漏洞实战:从自动化探测到内存马注入的完整攻防解析

Shiro反序列化漏洞实战:从自动化探测到内存马注入的完整攻防解析

1. 项目概述与核心价值最近在安全测试和应急响应中,Shiro框架的反序列化漏洞依然是绕不开的老朋友。虽然这个洞已经出来好几年了,但很多老旧系统、内网应用依然存在,而且利用方式也在不断“进化”。今天想和大家深入聊聊的,不是简…

2026/7/4 20:51:46 阅读更多 →
WVP-GB28181-Pro企业级视频监控平台实战指南:从架构设计到部署优化完整方案

WVP-GB28181-Pro企业级视频监控平台实战指南:从架构设计到部署优化完整方案

WVP-GB28181-Pro企业级视频监控平台实战指南:从架构设计到部署优化完整方案 【免费下载链接】wvp-GB28181-pro 基于GB28181-2016、部标808、部标1078标准实现的开箱即用的网络视频平台。自带管理页面,支持NAT穿透,支持海康、大华、宇视等品牌…

2026/7/4 20:49:45 阅读更多 →
功能安全与网络安全工程2030:行业的未来是什么?

功能安全与网络安全工程2030:行业的未来是什么?

系统开发的未来取决于功能安全与网络安全工程趋势的快速演变。随着互联系统、自主功能和软件定义车辆的复杂性不断提升,行业必须转变思维方式——从静态风险模型转向持续、集成的保障。 本文探讨了影响2030年功能安全与网络安全工程的主要趋势。我们将探讨ASPICE、…

2026/7/4 20:47:44 阅读更多 →
如何在Linux桌面实现Steam动态壁纸引擎的原生体验?

如何在Linux桌面实现Steam动态壁纸引擎的原生体验?

如何在Linux桌面实现Steam动态壁纸引擎的原生体验? 【免费下载链接】linux-wallpaperengine Wallpaper Engine backgrounds for Linux! 项目地址: https://gitcode.com/gh_mirrors/li/linux-wallpaperengine 对于许多从Windows迁移到Linux的用户来说&#xf…

2026/7/4 20:47:44 阅读更多 →
E-Hentai Downloader:重新定义漫画资源管理的智能解决方案

E-Hentai Downloader:重新定义漫画资源管理的智能解决方案

E-Hentai Downloader:重新定义漫画资源管理的智能解决方案 在数字内容管理领域,高效获取和整理漫画资源一直是个技术挑战。传统的手动下载方式不仅耗时耗力,还面临着文件管理混乱、资源完整性难以保证等问题。E-Hentai Downloader作为一款基于…

2026/7/4 20:45:44 阅读更多 →
WorkFlow入门Step.1—My Frist WorkFlow Trip!

WorkFlow入门Step.1—My Frist WorkFlow Trip!

自从上次书写的关于《AgileEAS.NET平台开发Step By Step系列-药店系统-索引》使用AgileEAS.NET 敏捷软件开发平台之后,封笔了一段时间,一是最近比较忙,给客户指导培训,通过近20多天的时间,也是开发了一个建议的ERP系统…

2026/7/4 20:43:44 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻