P5666 [CSP-S2019] 树的重心
考虑一个结点在什么情况下会成为重心。
随便钦定一个根结点。对于结点
令
整理一下就变成
对于割掉
整理一下就变成
对于前一种情况,dsu on tree 维护一个树状数组计算可以割掉的子树数量。
对于后一种情况,先将全部子树扔进树状数组,然后在 DFS 的过程中不断更新(和换根 DP 一样)。不过我们只能得到当前子树内和子树外的和,所以得在前面 dsu on tree 的时候提前减掉子树内的部分。
注意上界大部分都是一样的,后一种情况的下界则都是一样的,所以可以记下来避免多次查询,常数会变小很多。
当然两只
发现要维护的信息可以直接进行简单的加减得到,所以没有必要使用 dsu on tree,依次累加,离开某个子树时的答案减去进入该子树时的答案即是该子树内的答案。
我真是个傻逼
还有
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通