P5912 JAS 题解
题意;找出最浅的点分树。
发现这是一个等价问题:给每个结点一个标号,当两个结点标号相同时,它们的路径上必有严格更小的标号。如果找到了这样一种标号方法,每个结点的标号就是它的深度。
同时我们还可以把每个结点的标号
给出一个贪心构造标号的方法:先让所有叶子为
那我们如何判断一个结点
定义一个结点
子树的溢出的结点构成子树的溢出集合。
显然
然后是这个贪心的证明。
记
两个引理:
-
当
填 时, 子树的溢出集合最小。这里的最小是指如果把集合看作二进制数时最小。后面的集合比大小也是这么定义。 -
当
, 。
若这两条引理成立,贪心就能简单证出来:
根据 2,要
而根据 1,填
引理 1 证明:
观察到
记
引理 2 证明:
记
发现若
再简化一下命题,因为引理 2 其实表示了一个单调性质,于是我们可以假设
设
-
情况一,
有元素大于 。因为有交集大于
,所以 一定大于 。而 为填了 的溢出集合,因为 ,比 低的位都会变成 (不再溢出)。但
的区别就是: 的最低位一直到 的前一位都是 ,第 位是 ; 的最低位一直到 的前一位都是 ,第 位都是 。其他的都一样。但是
把较低位的都变成 了,所以 最终算出来的 相等。 -
情况二,不满足情况一且
。因为
选择的位不能出现在任何儿子的溢出集合,所以 选择的位一定在所有儿子的溢出集合中都是 ,也就等价于 的位上和 的位上都是 。( )因为
,所以 的第 位为 。考虑
,因为 第 位以下都是 ,第 位为 ,所以 不能在 及以下。(第 位及以下都有非 的)因此 是在第 位以上找到的第一个 都是 的位。又
的第 位都是 ,重复了,所以 必须高于第 位。所以 是在第 位以上找到的第一个 都是 的位。因为第
位以上 相同。所以这种情况下 。 -
情况三,不满足情况一且
。则
的第 位为 。因为
的第 位都是 ,所以 就是第 位, 的第 位以上为 ,第 位为 ,第 位以下为 。即
。因为
的第 位为 , 比第 位更高的位与 相等。所以 至少第 位是 ,比 高的位和 相同。而比 低的位 全是 ,所以 。
综上,引理 2 也得证了。
所以贪心方法是:每个叶节点都标号
计算溢出集合、找出最低的都是
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战