省选模拟4
省选模拟4
A
小丑做法,设
转移朴素枚举,复杂度
B
是原题。
注意到一个点走过一轮后,从父亲离开后下一次访问会完全访问。
因此可以 dfs 求得一个节点会在第几轮整体遍历的时候走到(也就是从根节点离开再回到根节点的过程,本质上是数有多少个祖先跳过了这个方向的子树)
显然最多
那么对于一个询问,可以先二分得到其轮数,然后在当前轮的状态下查找第某个访问的节点
使用线段树,利用双指针去掉二分。
C
考虑真正的最短路应该如何走。
不妨将这个排列视作棋盘上的
那么有:
这样可以看出,一个连通块必然是原排列的一段区间,且若
那么我们现在就当连通处理。
考虑这时候右上部分和左下部分的问题事实上是独立的。
例如右上部分,我们一定会走一个一步到达的最上方点或者最右边点。
我们不妨以右上部分为例,拿出这两个点,
这时候等效于走到这个红点。
那么我们可以通过一定的预处理,直接求得对于每个
同时这时候我们的答案就呼之欲出了:
也就是,事实上答案是这个 “红点” 路径,所有“红点”的右上角矩阵中点个数之和。
这样就可以通过一定的预处理得到一个平方复杂度的做法。
现在考虑优化它。
事实上,我们将整个跳跃过程的图建立出来,我们声称其点个数数量级不超过
证明考虑,除了起始点之外,走到的任意一个点
因此拿出所有的这样的
考虑将其中前
然后考虑答案的计算,直接建立出这棵树,然后从上往下扫描线即可。
注意只需要加入
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2023-02-02 树链剖分习题集
2023-02-02 树链剖分入门