1 条题解

  • 0
    @ 2026-8-28 1:35:32

    题解

    思路

    只考虑所有标记点构成的集合。设其中距离最远的两个点为 A,BA,B,距离为 DD。任意顶点到全部标记点的最大距离至少为 ⌈D/2⌉\lceil D/2\rceil;而直径路径的中点到每个标记点的距离都不超过该值。因此答案为 ⌈D/2⌉\lceil D/2\rceil。

    做法

    小规模枚举每个候选顶点,遍历树求它到标记点的最远距离。

    若只有一个标记点,选择它自身,答案为 0。

    一般情况从任一标记点遍历,取最远标记点 AA;再从 AA 遍历,取最远标记点距离 DD。输出 (D+1)/2(D+1)/2。

    正确性证明

    对任意顶点 vv,由三角不等式 d(A,B)≤d(A,v)+d(v,B)d(A,B)\le d(A,v)+d(v,B),故两者至少一个不小于 ⌈D/2⌉\lceil D/2\rceil。另一方面,标记点集合的直径路径中点到任意标记点的距离不超过 ⌈D/2⌉\lceil D/2\rceil,否则该标记点与 AA 或 BB 会形成更长距离,矛盾。上下界相等,公式成立。两次遍历准确找到树上给定点集的一对直径端点。

    复杂度分析

    每组进行两次树遍历,时间复杂度 O(n)O(n),空间复杂度 O(n)O(n)。

    • 1

    信息

    ID
    1131
    时间
    2000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者