专栏文章
P11516 题解
P11516题解参与者 4已保存评论 5
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @miqadqw2
- 此快照首次捕获于
- 2025/12/04 01:34 3 个月前
- 此快照最后确认于
- 2025/12/04 01:34 3 个月前
博弈终止节点编号大小,这提示我们直接按双方策略 dp。
先考虑一些部分分。
Sub1: 时,相当于每次往 的方向走 步,最终一定走到 。
Sub2:最后的停止点显然由 Bob 决定,线段树优化 dp。
考虑把 Sub2 的做法拓展到树上,设 表示 Alice/Bob 在点 时的结果。额外地设 表示当前在 ,不能走进 的子树的结果。
设 为 子树内距离 等于 的点集, 表示距离 不超过 的点集(不含祖先), 表示 的 级祖先。
现在你已经会 了。(在 Alice 无路可走的时候 的转移有变,但也可以简单计算)
考虑优化 dp。
- 对于 的转移,不难发现每个 只会被一个 用到,均摊 。
- 对于 的转移, 树剖, 点分树(吗?)。
发现 邻域可以模板点分树,然而扣掉祖先后就不行了。
做法一
但是如果我们要查的是 而不是 就能做了。
于是我们在最外层二分一个答案 ,编号 的点为白点,编号 的为黑点。把 定义改成“能否走到一个黑点”, 同理。
然后我们就要查询类似“ 的 邻域内有没有 ”的形式,就可以愉快地上点分树了。
复杂度 ,盲猜过不了。
做法二
假设当前查询的点为 ,在点分树上跳 。对于 。
- 不能在 的同一颗子树内。
- 在原树上不能是 的祖先,不难发现如果这样的话 一定是 的祖先,在加入线段树时排除这些点即可。
对于点分树上每个点开一颗树状数组,每个位置维护最大值所在子树和其他子树的最大值。
复杂度 ,比当前次优解快 0.8s。
相关推荐
评论
共 5 条评论,欢迎与作者交流。
正在加载评论...