原题
翻译
- 发现所有长度相同的简单路径的权值可能情况相同,且最长的简单路径长度为 级别,考虑维护所有长度的简单路径在一棵树上出现的次数,每种简单路径的权值在所有树上出现的次数,相乘即使答案。
- 我们考虑长度为 的路径对答案的贡献,考虑枚举这条路径的贡献 ,让一个路径的最大值恰好 是困难的,因此我们考虑容斥。及让一个路径的 ,然后再做一个差分即可得到恰好 的答案。方案数显然为 ,其中求和中 是因为这条路径的权值为
- 第二步要做的是统计各个长度的路径个数。完全二叉树以低复杂度 dp 是困难的,故我们先假设原树是一个满二叉树。容易想到设 表示以深度为 的满二叉树,长度为 的路径个数, 表示深度为 的满二叉树,以根为起点长度为 的路径个数。容易得到转移:
- 然后我们要怎么解决完全二叉树的问题呢?这里有一个比较重要的性质:一个完全二叉树内本质不同的子树只有 个。证明就考虑对于一个节点,对于他的两个儿子,肯定一个是完全二叉树一个是满二叉树。因此我们不停递归是完全二叉树的儿子直至到达叶子节点,经过的路径长度显然是树高,即
- 因此我们只需要在 dfs 过程中合并两个结果即可
- 小 tips : 求一个树是否为满二叉树可以判断这个树 一直往左走的次数 是否等于 一直往右走的次数,这么判断复杂度是 的
- 小 tips2 : 计算 和 可以预处理
- 小 tips3 : 计算幂时可以不用快速幂,而是把要用到的提前预处理好
- 最终复杂度
- 小 tips4 : 貌似还可以继续优化:
- 倍增求深度的话一个 会变成 ,这很小,可以当成常数
- 计算 这个式子好像可以用多项式优化(我也不会 QwQ)
posted @
2023-10-18 10:49
FOX_konata
阅读(
18)
评论()
编辑
收藏
举报
点击右上角即可分享
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?