设我们已经构造出来了最优树,他的叶子节点分别是
假设的最长的一条路的倒数第二个节点(即这条路叶子节点的父亲)只有一个儿子,那么我们删掉这个节点,让他的儿子代替他,答案会变得更优,矛盾,所以一定有两个儿子。我们假设这两个儿子不全为和,即有一个儿子且,那我们将与不在这里的和交换,答案不会变得更差,即一定可以构造出来一个最优树,使得的两个儿子为和
我们在考虑收缩与展开。
假设的和合并成了一个节点(具体来说,令和的父亲节点的权值为,然后删掉和),这颗新树为,那么
同时,考虑点集的最优树为,找到这个最优树权值为的叶子节点,并将其展开(就是上面合并过程的逆过程),设得到的新树为,则有
那么我们把得到的两个式子相加,有,由于都是最优的,那么必须有和,即合并和展开后仍然是最优树
接下来考虑求,我们要求,如果能够将最小权值的两个节点合并并求出,那么就可以知道,然后一直递归下去,最后合并只剩一个节点即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构