Loading

发喷山火(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+\left\lceil\dfrac{-mi+1}{2}\right\rceil\le \left\lfloor\dfrac{dep_u-dis_u-1}{2}\right\rfloor \\ \Rightarrow 2k+2\cdot\left\lceil\dfrac{-mi+1}{2}\right\rceil\le dep_u-dis_u-1 \\ \]

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


正解(全局\(st\)):

考虑点分治。对跨越分治中心的 \(u\to v\) 求答案,分类讨论一下:

  • 不经过 \((1,1)\),只经过 \((1,-1)\)

    \(f_u\) 表示从分治中心到 \(u\) 是否只有 \((1,-1)\),那么路径合法等价于 \((f_u\wedge f_v)\wedge dis_u+dis_v< dep_v\),可以将所有 \(f=1\) 的扔到树状数组上维护。

  • 经过 \((1,1)\)

    \[2mik+2\cdot\left\lceil\dfrac{-mi+1}{2}\right\rceil\le dep_{v}-(dis_u+dis_v)-1 \\ \Rightarrow 2mik+2\cdot\left\lceil\dfrac{-mi+1}{2}\right\rceil-dep_v+dis_v\le -dis_u-1=t \]

    继续分 \((1,1)\)\(u\to rt\) 取到还是 \(rt\to v\) 取到。

    先考虑 \(u\to rt\),此时 \(mik=uk_{u}\)

    剩下需要分讨 \(\min(up_u,s_u+down_v)\)

    • \(up_u\le s_u+down_v\Rightarrow up_u-s_u\le down_v\)

      那么条件是 \(2\cdot uk_u+2\cdot \left\lceil\dfrac{-up_u+1}{2}\right\rceil-t\le dep_v-dis_v\)

    • \(up_u\ge s_u+down_v\Rightarrow up_u-s_u\ge down_v\)

      那么条件是 \(2\cdot uk_u+2\cdot \left\lceil\dfrac{-s_u-down_v+1}{2}\right\rceil-dep_v+dis_v\le t\),需要对 \(\bmod 2\) 分类讨论。

      • \(s_u\equiv down_v\pmod 2\)

        \[\begin{aligned} 2\cdot uk_u+2\cdot \left\lceil\dfrac{-s_u-down_v+1}{2}\right\rceil-dep_v+dis_v\le t \\ 2\cdot uk_u+2\cdot \left(\dfrac{-s_u-down_v}{2}+1\right)-dep_v+dis_v\le t \\ 2\cdot uk_u-s_u-down_v+2-dep_v+dis_v\le t \\ 2\cdot uk_u-s_u-t+2\le down_v+dep_v-dis_v \\ \end{aligned} \\ \]

      • \(s_u\not\equiv down_v\pmod 2\)

        \[\begin{aligned} 2\cdot uk_u+2\cdot \dfrac{-s_u-down_v+1}{2}-dep_v+dis_v\le t \\ 2\cdot uk_u-s_u-down_v+1-dep_v+dis_v\le t \\ 2\cdot uk_u-s_u-t+1\le down_v+dep_v-dis_v \\ \end{aligned} \]

​ 若最小值取到 \(rt\to v\) 这一段,\(mik=edis_v\),此时要求 \(f_u=1\) 且:

\[2\cdot dk_v+2\cdot\left\lceil\dfrac{-down_v+1}{2}\right\rceil-dep_v+dis_v\le t \]

发现都是一维/二维偏序,树状数组解决即可。这里有一个 \(\texttt{trick(from lhd)}\),为了避免对于“不同子树“限制的处理,可以维护一个满足要求的最大值、与最大值不在一棵子树中的”次大值“,这样如果得到的值不和最大值在一棵子树内,答案就是最大值,否则就是”次大值“。

时间复杂度 \(O(n\log^2 n)\),怒写 \(6.4\mathrm{kb}\)

谁问我了

posted @ 2025-09-18 22:28  STDJCY  阅读(6)  评论(0)    收藏  举报