UVa 12794 Miss Worm
题目描述虫小姐住在一个由房间和隧道组成的洞穴中。每条隧道连接两个不同的房间可以双向通行。洞穴中可能存在环但每个房间最多属于一个环。隧道和房间很狭窄虫小姐的身体一旦占据了一条隧道或房间就不能再次进入。有些房间有通往地面的出口。虫小姐想知道对于有地面出口的房间是否可以从该房间进入洞穴在洞穴内始终前进不后退最后从同一个房间离开并且走过的路程长度不小于她自身的长度MMM。如果可能输出最短的可行路程长度否则输出−1-1−1。输入格式输入包含多个测试用例。每个测试用例第一行包含两个整数SSS和TTT2≤S≤1042 \le S \le 10^42≤S≤1041≤T≤2S1 \le T \le 2S1≤T≤2S分别表示房间数和隧道数。房间编号为111到SSS。接下来TTT行每行三个整数AAA、BBB和CCC1≤AB≤S1 \le A B \le S1≤AB≤S1≤C≤1001 \le C \le 1001≤C≤100表示一条连接AAA和BBB的隧道长度为CCC。每个房间连接的隧道数不超过100100100。接下来一行包含一个整数QQQ1≤Q≤1001 \le Q \le 1001≤Q≤100表示查询数量。接下来QQQ行每行两个整数XXX和MMM1≤X≤S1 \le X \le S1≤X≤S1≤M≤1051 \le M \le 10^51≤M≤105表示入口房间和虫小姐的身体长度。输入以文件结束符终止。输出格式对于每个查询输出一行一个整数最短可行路程长度若不可能输出−1-1−1。样例输入4 4 1 2 12 2 3 10 3 4 8 2 4 5 3 1 23 4 10 1 24 8 9 1 2 1 2 3 1 3 4 1 2 5 10 5 6 25 2 6 20 3 7 9 7 8 3 3 8 4 4 1 10 4 60 8 5 7 55输出47 23 -1 20 -1 16 71题目分析图结构特点题目给出了一个关键约束每个房间最多属于一个环。这意味着整个洞穴是一个仙人掌图cactus graph\texttt{cactus graph}cactus graph每个连通分量要么是一棵树要么是一个环加上若干以环上节点为根的树。行走规则分析虫小姐需要从入口XXX进入始终前进不后退最后从XXX离开。在无向图中“不后退”意味着不能立即沿着刚刚经过的隧道原路返回但不禁止绕远路后从另一条路径返回。由于房间和隧道一旦经过就不能再次进入虫小姐的行走路径必须是一条简单回路不重复顶点起点终点相同。回路的结构在仙人掌图中任何简单回路必然由以下部分构成从起点XXX出发沿着树边或环上的边走到某个环的入口节点PPP从PPP进入该环完整地绕环一周因为进入和离开环必须是同一个节点否则会违反“每个节点最多属于一个环”的约束从PPP沿着原路返回XXX关键推论环的长度必须不小于虫小姐的身体长度MMM。因为虫小姐需要将自己的整个身体完全放入洞穴中而环是唯一的连续回路身体无法跨越环与树的交接处而不违反“不重复进入”的规则。特殊情况如果XXX本身就在某个环上那么XXX可以直接作为入口点PPP此时往返距离为000总路程即为该环的长度。如果XXX不在任何环上则必须走到某个环的入口节点再返回。解题思路第一步找出所有环使用深度优先搜索DFS\texttt{DFS}DFS遍历图。维护每个节点的父节点、深度和到父节点的距离。当遇到一条指向已访问节点且不是父节点的边时就找到了一个环。从当前节点沿着父链向上回溯到该祖先节点即可收集环上的所有节点并计算环的长度。由于每个节点最多属于一个环这种找环方法是正确且高效的。第二步计算节点到环的距离对于每个环以环上的所有节点作为源点运行单源最短路径算法Dijkstra\texttt{Dijkstra}Dijkstra计算出图中所有节点到该环的最短距离。由于边权最大为100100100也可以使用BFS\texttt{BFS}BFS加优先队列但Dijkstra\texttt{Dijkstra}Dijkstra是最通用的选择。设dist[X][c]\textit{dist}[X][c]dist[X][c]表示节点XXX到第ccc个环的最短距离。第三步处理查询对于每个查询(X,M)(X, M)(X,M)遍历所有环只考虑长度≥M\ge M≥M的环如果XXX恰好在该环上即dist[X][c]0\textit{dist}[X][c] 0dist[X][c]0则可行路程为环的长度否则可行路程为2×dist[X][c] 2 \times \textit{dist}[X][c] \ 2×dist[X][c]环长取所有可行路程中的最小值作为答案若没有满足条件的环输出−1-1−1复杂度分析找环O(ST)O(S T)O(ST)计算距离对每个环运行一次Dijkstra\texttt{Dijkstra}Dijkstra环的数量最多为O(S)O(S)O(S)但由于每个节点最多属于一个环环的总数不超过S/3S/3S/3。每次Dijkstra\texttt{Dijkstra}Dijkstra的复杂度为O((ST)log⁡S)O((S T) \log S)O((ST)logS)总复杂度O(S⋅(ST)log⁡S)O(S \cdot (S T) \log S)O(S⋅(ST)logS)在最坏情况下可能较高。实际数据规模下S≤104S \le 10^4S≤104T≤2ST \le 2ST≤2S环数较少这种方法可以接受。另一种优化是使用BFS\texttt{BFS}BFS加双端队列处理单位边权边权为111但本题边权为111到100100100故使用Dijkstra\texttt{Dijkstra}Dijkstra。查询每个查询O(环数)O(\text{环数})O(环数)环数≤S/3\le S/3≤S/3Q≤100Q \le 100Q≤100完全可行。代码实现// Miss Worm// UVa ID: 12794// Verdict: Accepted// Submission Date: 2026-06-13// UVa Run Time: 0.330s//// 版权所有C2026邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;structEdge{intto,w;};intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intS,T;while(cinST){vectorvectorEdgeg(S1);for(inti0;iT;i){inta,b,c;cinabc;g[a].push_back({b,c});g[b].push_back({a,c});}// 找环vectorintparent(S1,-1),depth(S1,0),d1(S1,0);vectorintcycleId(S1,-1),cycleLength;vectorboolvisited(S1,false);functionvoid(int,int)dfs[](intu,intp){visited[u]true;for(autoe:g[u]){intve.to;if(vp)continue;if(visited[v]){if(depth[v]depth[u]){intcidcycleLength.size();intw0;intuuu;while(uu!v){cycleId[uu]cid;wd1[uu];uuparent[uu];}cycleId[v]cid;we.w;cycleLength.push_back(w);}}else{parent[v]u;depth[v]depth[u]1;d1[v]e.w;dfs(v,u);}}};for(inti1;iS;i)if(!visited[i])dfs(i,-1);for(inti1;iS;i)if(cycleId[i]-1)cycleId[i]-2;intnccycleLength.size();vectorvectorintd2(S1,vectorint(nc,-1));for(intcid0;cidnc;cid){priority_queuepairint,int,vectorpairint,int,greaterpairint,intpq;vectorbooldone(S1,false);for(inti1;iS;i)if(cycleId[i]cid){d2[i][cid]0;pq.push(make_pair(0,i));}while(!pq.empty()){pairint,inttoppq.top();pq.pop();intdtop.first,utop.second;if(done[u])continue;done[u]true;for(size_t j0;jg[u].size();j){Edgeeg[u][j];intve.to,ndde.w;if(d2[v][cid]-1||ndd2[v][cid]){d2[v][cid]nd;pq.push(make_pair(nd,v));}}}}intQ;cinQ;while(Q--){intX,M;cinXM;intr-1;for(intcid0;cidnc;cid){if(cycleLength[cid]M)continue;intdd2[X][cid];if(d-1)continue;inttotal(cycleId[X]cid)?cycleLength[cid]:(2*dcycleLength[cid]);if(r-1||totalr)rtotal;}coutr\n;}}return0;}总结本题的核心在于抓住仙人掌图的结构特性“每个节点最多属于一个环”。基于这一特性可以推出任何简单回路必须完整地经过某个环不能只走环的一部分进入和离开环必须是同一个节点环的长度必须不小于虫小姐的身体长度解题步骤可以概括为用DFS\texttt{DFS}DFS找出所有环并计算环长用Dijkstra\texttt{Dijkstra}Dijkstra计算每个节点到每个环的最短距离对每个查询在满足长度条件的环中取最优值关键技巧将复杂的回路问题转化为“树边往返完整环长”的组合充分利用仙人掌图的特殊性质简化问题。这种分析思路在处理具有特殊约束的图论问题时非常有用。

相关新闻

UVa 11336 DRM

UVa 11336 DRM

题目描述 DRM Inc.\texttt{DRM Inc.}DRM Inc. 是一家生产数字道路地图的公司。一张数字地图由一组地点和一组连接地点的街道组成。街道是无向的,即双向街道。 地点 aaa 到地点 bbb 的道路是一个地点序列 ⟨u0,u1,…,un⟩\langle u_0, u_1, \ldots, u_n \rangle⟨u0​…

2026/8/10 12:45:37 阅读更多 →
终极指南:如何用Plain Craft Launcher 2轻松管理你的Minecraft游戏体验

终极指南:如何用Plain Craft Launcher 2轻松管理你的Minecraft游戏体验

终极指南:如何用Plain Craft Launcher 2轻松管理你的Minecraft游戏体验 【免费下载链接】PCL Minecraft 启动器 Plain Craft Launcher(PCL)。 项目地址: https://gitcode.com/gh_mirrors/pc/PCL Plain Craft Launcher 2(PC…

2026/8/10 12:45:37 阅读更多 →
VMware Tools 手动安装全攻略:解决灰色按钮问题,提升虚拟机性能

VMware Tools 手动安装全攻略:解决灰色按钮问题,提升虚拟机性能

在虚拟机环境中,VMware Tools 是提升用户体验和系统性能的关键组件,它负责实现主机与虚拟机之间的无缝集成,如文件拖拽、剪贴板共享、屏幕自适应分辨率以及时间同步等功能。然而,许多用户在安装或升级虚拟机系统后,经常…

2026/8/10 12:45:37 阅读更多 →

最新新闻

DesktopSharing:如何实现毫秒级延迟的实时桌面共享?

DesktopSharing:如何实现毫秒级延迟的实时桌面共享?

DesktopSharing:如何实现毫秒级延迟的实时桌面共享? 【免费下载链接】DesktopSharing 桌面共享, 支持RTSP转发, RTSP推流, RTMP推流。 项目地址: https://gitcode.com/gh_mirrors/de/DesktopSharing 您是否遇到过远程协作时屏幕卡顿、画面延迟的问…

2026/8/10 15:03:27 阅读更多 →
解锁音乐格式:Unlock Music完整技术实现与使用指南

解锁音乐格式:Unlock Music完整技术实现与使用指南

解锁音乐格式:Unlock Music完整技术实现与使用指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://…

2026/8/10 15:03:27 阅读更多 →
Ehoney蜜罐系统终极指南:从零构建企业级网络安全防线

Ehoney蜜罐系统终极指南:从零构建企业级网络安全防线

Ehoney蜜罐系统终极指南:从零构建企业级网络安全防线 【免费下载链接】Ehoney 安全、快捷、高交互、企业级的蜜罐管理系统,护网;支持多种协议蜜罐、蜜签、诱饵等功能。A safe, fast, highly interactive and enterprise level honeypot manag…

2026/8/10 15:03:27 阅读更多 →
原神抽卡数据分析终极指南:用免费工具告别盲目抽卡

原神抽卡数据分析终极指南:用免费工具告别盲目抽卡

原神抽卡数据分析终极指南:用免费工具告别盲目抽卡 【免费下载链接】genshin-wish-export Easily export the Genshin Impact wish record. 项目地址: https://gitcode.com/GitHub_Trending/ge/genshin-wish-export 你是不是经常在抽卡时感到迷茫&#xff1f…

2026/8/10 15:03:27 阅读更多 →
Qiskit量子编程终极指南:从零开始掌握量子计算开发

Qiskit量子编程终极指南:从零开始掌握量子计算开发

Qiskit量子编程终极指南:从零开始掌握量子计算开发 【免费下载链接】qiskit Qiskit is an open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives. 项目地址: https://gitcode.com/gh_mirro…

2026/8/10 15:03:27 阅读更多 →
Redis 系列(五):持久化——RDB、AOF 与混合持久化

Redis 系列(五):持久化——RDB、AOF 与混合持久化

核心目标:理解 RDB、AOF、混合持久化三种方式的机制、代价与恢复语义;掌握 fork COW、fsync 策略、AOF 重写等关键概念;能设计符合业务丢失容忍度的持久化策略,并在文件损坏后完成修复与恢复。 前置知识:完成 Part 1&…

2026/8/10 15:02:27 阅读更多 →

日新闻

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南 【免费下载链接】graphql-css A blazing fast CSS-in-GQL™ library. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-css GraphQL-CSS是一个基于GraphQL的CSS-in-GQL™库&#xff0…

2026/8/10 0:00:02 阅读更多 →
告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcode.com/…

2026/8/10 0:00:02 阅读更多 →
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案 【免费下载链接】BepInEx.ConfigurationManager Plugin configuration manager for BepInEx 项目地址: https://gitcode.com/gh_mirrors/be/BepInEx.ConfigurationManager 你是否曾经因为游戏插件的复杂…

2026/8/10 0:00:02 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/10 1:05:29 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/10 1:05:29 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/10 1:05:29 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/9 17:05:02 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/10 1:05:29 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/9 17:05:02 阅读更多 →