首页 > 其他分享 >题解:P10198 Infinite Adventure P

题解:P10198 Infinite Adventure P

时间:2024-09-26 10:14:21浏览次数:1  
标签:log bmod 题解 最大值 路径 Delta Infinite P10198

\(\text{Link}\)

题意

给定 \(n\) 个数组 \(c_{i,0\dots t_i-1}\),其中 \(t_i\) 为 \(2\) 的幂。有 \(q\) 次询问,每次询问给出三个参数 \(x,T,\Delta\),接下来会执行 \(\Delta\) 次 \(x\gets c_{x,T\bmod t_x},T\gets T+1\),求出最终的 \(x\)。

\(n,\sum t\le 10^5\),\(q\le 5\times 10^4\)。

题解

令 \(n=\sum t\),\(v=\max\Delta\)。

从一点开始走若干步到达的点提示使用倍增

我们的状态数不能太多,于是一个想法是设 \(f_{i,j,k}\) 表示现在在点 \(i\),当前时间 \(\bmod\ t_i\) 等于 \(j\),走 \(2^k\) 步到达的点。

此时一个问题是如果跳到一个 \(t_u>t_i\) 的点 \(u\),维护的信息不足以得知当前时间 \(\bmod\ t_u\) 的值。注意到 \(t_i\) 只有 \(\log n\) 种,即我们在一条路径上最多遇到 \(\log n\) 次这种情况。于是我们将此种情况下的 \(f_{i,j,k}\) 定义为在这 \(2^k\) 步中遇到的第一个 \(t_u>t_i\) 的点 \(u\),还需再维护 \(g_{i,j,k}\) 表示在这个 \(u\) 之前已经走了几步了。

预处理与单次询问均可模拟:从高至低枚举每一位,不断跳直到该位为 \(0\),每一位至多只会跳 \(\log n\) 次。时间复杂度为 \(O(n\log n\log^2v+q\log n\log v)\),无法通过。

考虑复杂度瓶颈为预处理部分,我们在特殊情况中经过了形如 \(i\to u\to v\) 且 \(t_u<t_v<t_i\) 这样的路径,这造成了很大的复杂度开销,我们希望每一次跳到的点 \(u\) 对应的 \(t_u\) 均为路径上的前缀最大值,这样一条任意长的路径也只需要跳 \(\log n+\log v\) 次即可跳完。

考虑令 \(f_{i,j,k}\) 为在时间为 \(j\pmod{t_i}\) 时从点 \(i\) 开始不断走直到经过了 \(2^k\) 个使得 \(t_u=t_i\) 的点 \(u\) 或到达一个使得 \(t_u>t_i\) 的点 \(u\),此时到达的点。相应地有 \(g_{i,j,k}\) 表示这条路径的长度。

预处理时先从小到大枚举 \(v\),对所有 \(t_i=2^v\) 的 \(i\) 求出所有 \(f_{i,j,k}\)。重点为求出 \(f_{i,j,0}\),从 \(c_{i,j}\) 开始不断向其后第一个 \(t\) 比自身大的跳即可。

询问时先不断向大跳直到达到路径上 \(t\) 的最大值,此后跳过所有 \(t\) 值为最大值的点即可减小最大值,显然我们只能减少 \(\log n\) 次。

总时间复杂度 \(O(n\log v+q\log n\log v)\),可以通过。

标签:log,bmod,题解,最大值,路径,Delta,Infinite,P10198
From: https://www.cnblogs.com/cyffff/p/18432912

相关文章

  • 题解:P10998 Tuple+
    \(\text{Link}\)有意思,记录一下。题意给出\(m\)个互不相同的无序三元组\((u,v,w)\),求有多少无序四元组\((a,b,c,d)\)使得三元组\((a,b,c),(a,b,d),(a,c,d),(b,c,d)\)均存在。\(m\le3\times10^5\)。Bonus:\(m\le2\times10^6\)。题解回忆无向图三元环计数的做法,使......
  • 题解:P10590 磁力块
    \(\text{Link}\)来自传奇讨论区大神@年年有年的\(O(n\logn)\)做法!题意有\(n+1\)块磁铁\(0\simn\),每个磁铁都有四个属性\((d_i,m_i,p_i,r_i)\),如果你拥有了磁铁\(i\),那么你就能吸引并拥有所有满足\(d_j\ler_i,m_j\lep_i\)的磁铁\(j\),初始你只拥有磁铁\(0\),求最......
  • 题解:CF1799F Halve or Subtract
    \(\text{Link}\)介绍一下一种高维wqs的方法。此方法来自@YeahPotato的专栏严谨的WQS二分方法。题意给定一个长为\(n\)的序列\(v_{1\dotsn}\),三个常数\(d,a,b\)。你可以执行若干次以下两种操作:选择\(1\lei\len\),令\(v_i\gets\lceil\frac{v_i}{2}\rceil\)。......
  • 勇攀山丘小队(翻越篇)1——题解
    前言胸有丘壑,气吞山河。正片A题:考虑使用DP,由于题目给了2个a不能在一起的限制,所以每次接上一个a都要考虑一下前面的一个状态是否也是a。于是就可以使用\(f,g\)数组,\(f_i\)表示第\(i\)个字母是a的合法情况有多少,\(g_i\)表示第\(i\)个字母是b或c的合法......
  • P8907 [USACO22DEC] Making Friends P 题解
    P8907[USACO22DEC]MakingFriendsP题解我们考虑维护每个\(i\),在\(i\)的后面有多少个点和它有朋友关系。初步的想法是每删掉一个人就给集合里所有的点连边。但是我们发现这样太不优了,有很多边会重复连很多次。优化的想法是对于\(i\),删去之后连的边就成了一个完全图,于是......
  • [GYM103119K][2020 ICPC Asia Macau] Candy Ads 题解
    题意简述有\(n\)个广告,每个广告在一个时间段内占据二维平面的矩形,\(m\)个约束表示两个广告至少有一个要被选择,选择若干广告,满足所有约束且同时刻不能有重叠的广告。Kosaraju算法流程在正图上跑一遍DFS,给每个位置打上时间戳从时间戳大到小枚举点,在反图上跑DFS,这个时候对......
  • 题解 洛谷P3398 仓鼠找 sugar
    原题链接:P3398仓鼠找sugar题解里大部分都是用的lca,然而我看不懂那些关于lca的性质是怎么证明出来的。不过这题可以直接用树链剖分来写,把模板套上去就好了。题意为查找两条路径是否存在公共点,我们只需要把其中一条路径上的点都赋值为1,然后查询另一条路径上的点的总和,如果总和......
  • [ARC062F] AtCoDeerくんとグラフ色塗り 题解
    思路对于一个点双,我们可以发现:假如它是一个简单环,那么它只能旋转这一个环,我们可以使用polya定理计算。假如它是多个环的组成,那么它的颜色可以随意调动,任何的情况都可以得到,那么假如说有\(m\)条边,方案数则为\(\binom{m+k-1}{k-1}\),我们只考虑每一种颜色的出现次数。对于......
  • 题解 QOJ5034【>.<】/ BC2401D【可爱路径】
    必可赛前公益众筹赛第一试Dhttps://qoj.ac/problem/5034,2022-2023集训队互测Round6(Nov12,2022)题目描述这原本是一道简单的最短路问题,但是由于种种地域文化,宗教信仰以及政治因素,原来一些或许可以行走的路径不能通行了。我们定义禁止路径为连续的经过一些特定的点的......
  • Luogu_P10977(AcWing_299) Cut the Sequence 题解
    解题思路考虑线性dp。首先如果存在\(a_i>m\),那肯定不满足条件,输出\(-1\)。设\(f_i\)表示前\(i\)个数分成若干段,然后每段最大数之和,其中每段内的整数之和不超过\(m\)。\(f_i\)肯定是由\(f_j\)(\(1\lej<i\))转移过来的,也就是前\(j\)个数分好后再加上\((j,i]\)这一......