1 条题解

  • 0
    @ 2025-8-24 23:10:56

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar ForgotMe
    花与剑无痕,高挂一轮明灯。银蝶染旧梦,生死莫再问。

    搬运于2025-08-24 23:10:56,当前版本为作者最后更新于2025-03-08 21:32:27,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    破防了,写了一下午的乱搞,也不知道自己最后在写什么玩意,反正最后 sub1 tle 3 个点喜提 0 分!

    如果你一上来就跟我一样考虑从剥叶子去做,那么基本上就做不出来了,甚至你会怀疑这题是否可做,怎么可能只用这么少的空位。

    不如从一条链开始考虑,这是简单的,显然只需要两个空位就可以做。但是实际上链上的每个点可能会挂着若干个子树,假设这条链的顺序是 u1,u2,...,uku_1,u_2,...,u_k,那么先给 u1u_1 留一个空位放进去,然后使用某种策略先把 u1u_1 挂着的所有子树给构建出来(显然一旦构建出来后,所占据的所有空位都可以释放出来),这是一个子问题,接着扫到 u2u_2 时把 u1u_1u2u_2 连起来,并将 u1u_1 占着的空位释放出来,依次这么做,可以发现如果设 FnF_n 表示大小为 nn 的的树所需的空位数量,那么 Fn=Fmx+1F_n=F_{mx}+1,其中 mxmx 为链上挂着的子树大小最大值。

    现在问题变为选出树的一条链,让 mxmx 尽量的小。显然你可以选一条经过重心的链,从而让 mxmxn2\dfrac{n}{2} 的级别,这样可以做到 Fn=log2nF_n=\log_2 n,显然无法通过。实际上可以做到更优,考虑选出重心,以及其最大子树的儿子对应的重链,次大子树的儿子对应的重链,三段拼起来。设 S1,S2,S3S_1,S_2,S_3 分别表示最大子树的大小,次大子树的大小,以及剩下子树大小的最大值。那么根据重儿子的性质以及重心的性质 n2>S1>S2>S3\dfrac{n}{2}>S_1>S_2>S_3mx=max(S12,S22,S3)mx=\max(\dfrac{S_1}{2},\dfrac{S_2}{2},S_3)。那么在最坏情况下 S1=S2=S3=n3S_1=S_2=S_3=\dfrac{n}{3}mx=n3mx=\frac{n}{3},得到 Fn=log3nF_n=\log_3 n,可以通过此题。

    代码就不放了,模拟上述思路即可。

    • 1

    信息

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