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

发喷山火(volcano)+CF2119F Volcanic Eruptions 解题报告

发喷山火

神题

先来初步挖掘一下这个走路过程的性质:

  1. 初始时 \(S=1\),且 \(S\le 0\) 就死了,所以在没有走到 \((1,1)\) 之前,只能走 \((1,-1)\) 的边。
  2. 由于你和岩浆走路速度相同,所以一旦路径中你已经触碰到岩浆,那么你无论如何都逃不出去了,所以触碰过岩浆等价于最后停下的位置没有岩浆。

由性质1,如果没有经过 \((1,1)\) 的边,那么一定是 \(1,-1,1,-1,\dots\) 交替走。否则先来分析经过 \((1,1)\) 的情况,这显然是强于没有的情况的。

我们试图刻画一下最优走法的形态。往返是不好处理的,我们将在一条边上来回走的行为称为掉头,那么不难发现,在没有经过 \((1,1)\) 之前就掉头一定是不优的,因为我们可以将这些掉头全部放到 \((1,1)\) 的边上不停掉头。

然后就可以将走法刻画成一个简单的形态:一条链外接一条尽头为 \((1,1)\) 边的支链

volcano.png

得到形态后,考虑固定住终点 \(ed\),那么所有满足要求的 \((1,1)\) 就是从主链分出去的各个支链中满足到起点的路径都是 \((1,-1)\) 中最靠近主链的。

接下来考虑表示出答案,记 \(dep_{u}\) 表示根到 \(u\) 的距离。对于一条从 \(st\to ed\) 的路径,其对起点 \(st\) 的贡献是什么?根据前面的分析,没有碰到岩浆等价于最后终点 \(ed\) 没有碰到岩浆,所以到达时间 \(t\le dep_{ed}\),这样就不用考虑岩浆了,再分析一下取到的上界。注意到走掉头边是不会改变路径长度奇偶性的,原来的简单路径长度奇偶是 \(dep_{st}\oplus dep_{ed}\),那么奇偶性不会变,有 \(t\equiv dep_{st}\oplus dep_{ed}\pmod 2\)。那么最终的答案可以表示为 \(dep_{ed}-[(dep_{st}\oplus dep_{ed})\not\equiv dep_{ed}\pmod 2]\),化简为 \(dep_{ed}+(dep_{st}\bmod 2)-1\)

我们发现,这个答案的式子中只需要对 \(st\) 求出 \(\displaystyle\max_{st\to ed\texttt{ is valid}} dep_{ed}\)

弱化版(只有一个 \(st\))---CF2119F Volcanic Eruptions

\(st\) 为根,考虑对 \(ed=u\) 处理贡献。用 \(dis_u\) 表示到点 \(u\) 的距离,\(s_u\) 表示到点 \(u\)\(w\) 贡献和。对于一条支链 ,用 \(k\) 表示从主链到最近的 \((1,1)\) 的距离,从这条支链往下走到 \(u\) 的路径最低点为 \(mi\),设 \(x\) 表示在 \((1,1)\) 上的掉头次数。由于要在 \(dep_{u}\) 时间之前到 \(u\),所以 \(dis_{u}+2k+2x<dep_u\),即 \(x\le \left\lfloor\dfrac{dep_u-dis_u-1-2k}{2}\right\rfloor\),并且要保证走 \(v\to u\) 这条路时生命值始终为正,即 \(mi+2x\ge 1\),即 \(x\ge \left\lceil\dfrac{-mi+1}{2}\right\rceil\),只需要 \(x\) 有取值即可,等价于满足:

\[\left\lceil\dfrac{-mi+1}{2}\right\rceil\le \left\lfloor\dfrac{dep_u-dis_u-1-2k}{2}\right\rfloor \\ \Rightarrow \left\lceil\dfrac{-mi+1}{2}\right\rceil\le \left\lfloor\dfrac{dep_u-dis_u-1}{2}\right\rfloor-k \\ \Rightarrow k\le \left\lfloor\dfrac{dep_u-dis_u-1}{2}\right\rfloor-\left\lceil\dfrac{-mi+1}{2}\right\rceil \]

于是可以在 \(\mathrm{dfs}\) 的过程中维护上述信息,时间复杂度 \(O(n)\)

http://www.hskmm.com/?act=detail&tid=8911

相关文章:

  • matlab免费下载安装激活教程(附安装包下载)MATLAB R2025a超详细下载安装教程
  • Spring Boot + flowable 完美结合,快速实现工作流 - 教程
  • Pyfluent 执行Meshing工作流
  • EF Core 与 MySQL:日志和调试详解
  • 使用镜像源解决github拉取代码问题 - GD
  • 日记
  • 主机连接虚拟机和hbase的命令
  • 类和面向对象
  • PHP转Go系列 | PHP8 这些新函数让你眼前一亮
  • 代码随想录算法训练营第二天 |209.长度最小的子数组,59. 螺旋矩阵 II
  • mac更新or安装homebrew失败
  • Typescript中闭包的原理 - 教程
  • CF2048H Kevin and Strange Operation
  • Hadoop本地库加载问题分析与解决方案
  • GO基础总结
  • Visual Studio 离线安装0x80131509
  • Oracle备份恢复:backup as copy保留文件名不变化,只更改路径名
  • 读书笔记:数据库中的预连接神器:位图连接索引
  • 故障处理:CRS无法随操作系统自动启动故障案例分享
  • 02020401 EF Core基础01-EF Core简介和开发环境搭建、实体类、配置类、继承DbContex的类、Migration包的使用
  • 专用通路方式
  • typeof()
  • 【未完成】2025.9 做题记录
  • 2025.8 做题记录
  • 关于 “Thinking Machines Lab首次发长文” 的一些知识的学习和补充
  • CF1630F 题解 | 网络流
  • 攻防世界-secret-galaxy-300 - xxx
  • 实用指南:LeetCode 面试经典 150_哈希表_单词规律(41_290_C++_简单)
  • 数据库
  • 代码随想录算法训练营第二天 | leetcode 209