小Q的棋盘
我们先按树形DP做
我们模拟一下如何走,会发现有可能会先从根节点往下走,然后回到根节点,再从根节点继续往下走,这个过程甚至可以重复多次
所以我们会发现很重要的一点就是是否回到根节点,所以我们设
于是有
当然我们多模拟几遍就会发现一个很重要的东西,如果我们给定了要走的点(具体的,比如说给了一颗具体的树),然后问全部点都走一遍最少要用多少步
这个模型其实以前经常遇到过,答案就是点数
于是乎,我们求出从根节点出发的最长链,设长度为
后面这一个的来源见下
update 2024.6.30
后面一种做法的代码见hydrobzoj,可以分的更细一点
如果
如果
如果
这条最长链的每条边都只会经过一遍,然后分支的每条边都会经过两遍,于是
update 2024.8.31
第一种想法来源于树形DP的一般决策。我们考虑现在已经决策了的子节点集合为
第二种想法来源于树的直径。看到“最远”就可以往树的直径上面想,最后那个式子可以简单理解为:最长链的每一条边走一次,还剩下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构