1 条题解

  • 0
    @ 2025-8-24 22:26:53

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar juju527
    **

    搬运于2025-08-24 22:26:53,当前版本为作者最后更新于2021-08-19 17:42:13,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    前置知识

    点分治,平衡树,扫描线。

    Solution\texttt{Solution}

    对于数图的连通块的题目,

    如果图是森林,最常见的方法是“点数减边数”。

    对于图长得很奇怪的情况,通常使用钦定“代表元”的方式数连通块。

    例如:CF1548E

    由于连边的条件和距离有关,想到和深度的关系。

    我们考虑用一个连通块中 bfs 序最小的点当作该连通块的代表元。

    记点 ii 的 bfs 序为 bib_i

    这里有一个强结论:对于一个点 xx,如果其与 bfs 序比其小的点无连边则其为某个连通块的代表元。

    考虑证明:

    引理:对于 bi<bj<bkb_i<b_j<b_k,若 dist(i,k)C&dist(j,k)C\text{dist}(i,k)\leq C\And \text{dist}(j,k)\leq C,则 dist(i,j)C\text{dist(i,j)}\leq C

    引理的证明可以考虑讨论下两两 lca\text{lca} 是否重合,容易证明。

    1. 如果存在 yy,满足 dist(x,y)C&by<bx\text{dist}(x,y)\leq C \And b_y<b_x

      那么显然 xx 不能是代表元。

    2. 如果不存在 yy,满足 dist(x,y)C&by<bx\text{dist}(x,y)\leq C \And b_y<b_x,且存在点 zz,满足 zzxx 在同一连通块中且 bz<bxb_z<b_x

      由于 xx 不存在往前的边,但 zzxx 在同一个 CC 连通块里。

      所以存在一条路径 xa1a2akzx\to a_1\to a_2\to\dots\to a_k\to z

      一定存在一条 baib_{a_i} 严格增的路径,根据引理容易证明。

      我们从 aka_k 往前考虑。

      由于 bz<bak1<bakb_z<b_{a_{k-1}}<b_{a_k},且存在边 (z,ak),(ak1,ak)(z,a_k),(a_{k-1},a_k),那么边 (z,ak1)(z,a_{k-1}) 存在。

      通过对 kk 归纳,我们最终可以得到边 (z,x)(z,x) 存在。

      与命题矛盾。

    故结论成立。

    我们现在只需要数在区间 [l,r][l,r] 中不存在往前的边的点的个数就能得到连通块数了。

    考虑记 preipre_i 表示满足 j<i&bj<bi&dist(i,j)Cj<i\And b_j<b_i\And \text{dist}(i,j)\leq C 的最大的 jj

    sufisuf_i 表示满足 j>i&bj<bi&dist(i,j)Cj>i\And b_j<b_i\And \text{dist}(i,j)\leq C 的最小的 jj

    显然,点 ii 在区间 [l,r][l,r] 的情况下是代表元当且仅当 prei<l&sufi>r&lirpre_i<l\And suf_i>r\And l\leq i\leq r

    求出 pre,sufpre,suf 后这个问题显然可以用离线扫描线解决。

    考虑如何求出 pre,sufpre,suf

    由于 dist\text{dist} 的奇怪限制,我们考虑点分治。

    值得一提的是点分治的过程中,由于我们只需要求一个最优化的式子,甚至不用管不同子树的限制。

    建立一颗以标号排序的平衡树,记录区间最小的到重心的距离。

    将整个块按 bib_i 从小到大的顺序插入平衡树里,依次询问即可。

    总的时间复杂度 O(nlog2n+mlogn)O(n\log^2n+m\log n)

    code

    • 1

    信息

    ID
    6316
    时间
    2000ms
    内存
    512MiB
    难度
    7
    标签
    递交数
    0
    已通过
    0
    上传者