专栏文章

题解:CF2129E Induced Subgraph Queries

CF2129E题解参与者 6已保存评论 5

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
5 条
当前快照
1 份
快照标识符
@mioghrb8
此快照首次捕获于
2025/12/02 18:49
3 个月前
此快照最后确认于
2025/12/02 18:49
3 个月前
查看原文
看上去就一眼莫队,你可以轻松地在 O(degu)\mathcal O(\deg_u) 的复杂度内移动指针。
先说这个轻松怎么做到。不拿发现 [1,n][1,n] 里选若干个数异或起来,你考虑每个二进制位都放 11。其实就是 O(n)\mathcal O(n) 量级的,不超过 2n12n-1
然后使用值域分块,就是 [1,V][1,V]V\sqrt V 段,然后维护每一段有多少数,显然直接修改就是 O(1)\mathcal O(1),查询先暴力跳大段然后锁定到一个段里去枚举答案。这样修改 O(1)\mathcal O(1) 查询 O(V)\mathcal O(\sqrt V)
现在的问题是,如果一个度数很大的点反复横跳,就爆炸了。
我们考虑这样子修改莫队算法的分块部分:设 pi=j=1idegi+1p_i=\sum\limits_{j=1}^i \deg_i+1,然后按 pn\sqrt{p_n} 为块长分块,每一个 ii 就在第 pipn\frac{p_i}{\sqrt{p_n}} 这一块。
+1+1 是为了避免 00 度节点的干扰。
不难发现 pnp_nO(m)\mathcal O(m) 级别的,这样我们大点独占一块,小点凑一起,这个复杂度显然是对的。
还有一种实现方法,我们把 [1,n][1,n] 的邻域挨个拿出来,拼成新的序列,在新的序列上面莫队。更多相关可以参考国家集训队 2025 论文集里焦思源的论文『浅谈一类图上邻域相关问题』。
调了调块长,发现 2pn2\sqrt{p_n} 跑起来更快一点。

评论

5 条评论,欢迎与作者交流。

正在加载评论...