当前位置: 首页 > news >正文

P15895 [TOPC 2025] One-Way Abyss 题解

P15895 [TOPC 2025] One-Way AbyssLink: https://www.luogu.com.cn/problem/P15895题目描述米蒂是一位勇敢的冒险家正在探索一个名为“深渊”的神秘地下洞穴系统。深渊由n nn条垂直的竖井和m mm条水平的隧道组成。每条隧道恰好连接同一深度上的两条竖井。所有m mm条隧道的深度各不相同而且令人惊奇的是每条隧道的正中央都有一份宝藏米蒂可以选择任意一条竖井作为起点。他从所选竖井的顶部开始向下移动并遵循以下规则他只能向下移动不允许向上移动。每当遇到一条水平隧道时他必须立即进入这条隧道并到达与之相连的另一条竖井。一旦进入一条水平隧道就无法原路返回。这些隧道中的宝藏具有不同的价值。米蒂希望尽可能多地收集宝藏。请帮助他计算从某条竖井出发时他最多能收集到的宝藏总价值。输入格式每个测试点包含多个测试用例。第一行包含测试用例的数量t tt接下来是每个测试用例的描述。每个测试用例的第一行包含两个整数n nn和m mm分别表示竖井的数量和水平隧道的数量。接下来的m mm行每行包含三个整数x xx、y yy和v vv表示一条位于某个深度的水平隧道连接编号为x xx和y yy的两条竖井且隧道内包含一份价值为v vv的宝藏。水平隧道按照从上到下的顺序给出这意味着不会有两条水平隧道处于同一深度。输出格式对于每个测试用例输出一个整数表示米蒂能够收集到的最大宝藏总价值。输入输出样例 #1输入 #11 3 3 1 2 3 2 3 4 1 3 9输出 #116输入输出样例 #2输入 #22 5 8 1 4 5 1 3 4 1 3 2 1 3 9 2 4 1 1 3 2 2 3 0 1 5 6 7 2 5 6 16 5 7 4输出 #228 20说明/提示1 ≤ t ≤ 20 1 \le t \le 201≤t≤201 ≤ n ≤ 2 × 10 5 1 \le n \le 2 \times 10^51≤n≤2×1050 ≤ m ≤ 2 × 10 5 0 \le m \le 2 \times 10^50≤m≤2×1051 ≤ x y ≤ n 1 \le x y \le n1≤xy≤n0 ≤ v ≤ 10 9 0 \le v \le 10^90≤v≤109保证所有测试用例的n nn之和不超过2 × 10 5 2 \times 10^52×105。保证所有测试用例的m mm之和不超过2 × 10 5 2 \times 10^52×105。翻译由 DeepSeek V3.2 完成Solution1. 题意一个下落游戏沿着竖线下落遇到横线必须顺着横线移步到另一条竖线并获得这条横线里的价值求到达底部时的最大总价值。2. 分析由于不存在位于相同高度的横线因此横线自上而下依次排列可记为第1 , 2 , ⋯ 1,2,\cdots1,2,⋯层。设f ( i , j ) f(i,j)f(i,j)表示到达第i ii层时处于j jj号矿井时的价值那么根据每行输入的( x , y , v i ) (x,y,v_i)(x,y,vi​)表示的连接关系容易发现可能有下面两种操作从y yy号矿井移步到x xx号矿井获得v i v_ivi​的价值从x xx号矿井移步到y yy号矿井同样是获得v i v_ivi​的价值。如此一来能得到下面两个相互交织的递推方程组{ f ( i , x ) f ( i − 1 , y ) v i f ( i , y ) f ( i − 1 , x ) v i \begin{cases} f(i,x) f(i-1,y) v_i \\ f(i,y) f(i-1,x) v_i \end{cases}{f(i,x)f(i−1,y)vi​f(i,y)f(i−1,x)vi​​最开始累计的价值为零因此初始条件是∀ t ∈ { 1 , 2 , ⋯ , n } , f ( 0 , t ) 0 \forall t \in \{1,2,\cdots, n\}, \quad f(0,t) 0∀t∈{1,2,⋯,n},f(0,t)0由于数据是2 × 10 5 2\times 10^52×105的数据规模因此O ( n 2 ) O(n^2)O(n2)的二维数组存所有的f ( i , j ) f(i,j)f(i,j)在空间复杂度上显然过不去需要考虑滚动优化将空间复杂度打到O ( n ) O(n)O(n)数组里只保留最近的最优即可。因为求最优解时只需要用最近一步迭代的结果继续往后推更早的用不到了。3. 代码usingSystem;classP15895{staticvoidMain(){inttConvert.ToInt32(Console.ReadLine());while(t--0){varnmConsole.ReadLine().Split();intnConvert.ToInt32(nm[0]);intmConvert.ToInt32(nm[1]);long[]fnewlong[n1];longresult0;for(inti0;im;i){varxyvConsole.ReadLine().Split();intxConvert.ToInt32(xyv[0]);intyConvert.ToInt32(xyv[1]);longvConvert.ToInt64(xyv[2]);longtmpxf[x],tmpyf[y];f[x]tmpyv;f[y]tmpxv;}for(inti1;in;i){if(f[i]result)resultf[i];}Console.WriteLine(result);}}}4. 轶事利用 C# 的托管等机制可以免去“多测不清空零分两行泪”以及内存泄漏的苦恼本题的模型其实是起源于东亚的一种梯子游戏 [1]。游戏结果完全仅由横线的排布决定无任何运气成分。换句话说出口和入口的对应关系其实就是一个已经定死的1 ∼ n 1\sim n1∼n的全排列。反映到这道题上选择一个入口后总共拿到多少奖励已经是板上钉钉的事。
http://www.gsyq.cn/news/1374029.html

相关文章:

  • 昇腾CANN ge 仓的图优化 Pass:哪些 Pass 真正影响推理性能
  • 比较运算符,逻辑运算符与三目运算
  • 从0开始打造自己的压缩软件(仅文字适配)上——文本的压缩
  • qemu和gcc编译
  • # 网页设计学习感悟
  • Claude Code 在安装vscode插件时遇到的问题。
  • 解锁UE5.1增强输入高级玩法:用自定义Input Modifier实现游戏摇杆灵敏度曲线与高级死区
  • Unity地形优化实战:Terrain设置、LOD与Draw Call控制,让你的开放世界跑得更流畅
  • 网络安全学习第112天
  • 2026国际传感器展会优质平台推荐:上海传感器展会、中国传感器展会、北京传感器展会、国际传感器展会、中国传感器展选择指南 - 优质品牌商家
  • 企业官网后台的工程化设计:内容建模、所见即所得与源码自主可控
  • 一文讲清楚规则、Skill、MCP
  • 别再手动下载DLL了!用Windows自带工具SFC/SCANNOW一键修复kernel32.dll错误
  • 2026年Q2,为何专业通信工程商纷纷锁定河北乐佳U型钢走线架? - 2026年企业推荐榜
  • 别再只用ARIMA了!用Python的SSA算法给你的时间序列数据‘卸个妆’(附完整代码与调参心得)
  • Bi-LSTM vs CNN-BiLSTM:实战对比哪个模型更适合你的时间序列预测任务?
  • 交通顶刊TR Part C 2026年6月论文导读(下)
  • AI应用开发岗面经
  • 别再让系统‘无家可归’:给已用满空间的Win10 SSD无损创建EFI引导分区指南
  • 别再只认ldd了!盘点5种查看Linux程序动态库依赖的方法(含静态/交叉编译场景)
  • 【程序源代码】答题微信小程序(含源码)
  • 2026年Q2长沙原木定制优选:深度解析逸林家具的硬实力与专业服务 - 2026年企业推荐榜
  • VMware升级后Ubuntu 22.04虚拟机网卡‘消失’?别慌,这6个命令帮你一键找回(附排查思路)
  • 不止是搜索!Listary隐藏玩法大揭秘:网页传文件、快速启动器、资源管理器增强
  • 别再乱装驱动了!Win10/Win11频繁蓝屏DPC_WATCHDOG_VIOLATION,用WinDBG揪出真凶(保姆级排查流程)
  • 告别虚拟机!手把手教你用U盘给新电脑装Win11+统信UOS 1060双系统(保姆级分区教程)
  • 别再乱拔网线了!在国产系统(UOS/KOS)里给网卡“软关机”的两种正确姿势
  • SAM(Segment Anything)实战:用Python+OpenCV把分割结果玩出花,不止是数据集
  • 别再一段段拼了!用UE4蓝图+Spline Component,一键生成连续管道/道路模型
  • 别再死记硬背区别了!用5个实际代码案例,带你吃透XLua和ToLua的核心用法差异