CF708C Centroids(换根dp)
题意:
给定一颗树,你有一次将树改造的机会,改造的意思是删去一条边,再加入一条边,保证改造后还是一棵树。
请问有多少点可以通过改造,成为这颗树的重心?(如果以某个点为根,每个子树的大小都不大于,则称某个点为重心)
思路:
是今天遇到的一道有意思的换根dp呃呃。
从题意来看,最重要的就是如何快速求出某个结点最大的子树,以及这棵子树最多能砍多大一个子子树下来并作为该结点的一个新子树,使得该结点的所有子树的大小不超过
先以
然而,仅靠
接下来看怎么转移。
对于
首先,对于所有子结点来说,如果
如果结点
如果结点 读者不难自证。它只能由
这两个数组处理出来之后,直接判断就能得出答案了。
代码如下:
__EOF__

本文链接:https://www.cnblogs.com/CZ-9/p/17368432.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具