2 条题解

  • 1
    @ 2026-9-25 22:28:09

    G

    本题首先转化,如果两路径不交(无公共点),则必然可以存在一条边,使得这条边可以分割选择的路径。

    不难发现,这很有前途。于是枚举断边 (u,v)(u, v)。uu 是 vv 的父亲。依题,我们只关心选择的路径长度,所以又发现长度大的路径存在,则长度比他小的路径必然存在。故转化成直径问题。

    在 vv 的子树中找直径(不必经过 vv),在 subtree(1) − subtree(v)\mathcal{subtree}(1)\ - \ \mathcal{subtree}(v) 的连通块中找直径("-" 是差集的意思)。

    前者是简单的。重点考虑后者。

    你不会以为要 DS 吧。

    先分类,直径有以下 33 种情况。

    • 过 uu
    • 路径 lca 位于 uu 的子树
    • 其他情况

    第一种情况,容易发现,维护 gig_{i} 表示 ii 出发,若第一步走到 ii 父亲,他的最长能走几步?转移时容易的。自证不难。

    第二种情况,记录 did_{i} 表示 路径 lca 在 ii 子树的路径长度最大值。转移依旧简单。注意判断防止非法。

    第三种情况,维护 hih_{i} 表示 ii 子树外,最长的路径,转移仍旧简单。

    hi=max⁡{hfa,h_i = \max\{h_{fa}, 经过 fafa 但不经过 ii 的最长路径}\}。

    最后,答案是依旧简单的.

    建议降下去 蓝。

    我不是红磷!

    信息

    ID
    2755
    时间
    2000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    13
    已通过
    4
    上传者