题意:
给定一棵树,第 个点的赋值范围是 。计数:选择一条路径,将路径上的点赋值,使得极差 ;并求出每种这样赋值方案的权值和。
,其余 。
看见极差,考虑枚举最小值 ,然后统计 的答案。
思路很简单,但是下一个问题是: 的取值范围高达 ,不可能单独枚举具体的值。
一般推到这里发现复杂度和值域有关就可以考虑转战其他思路了。但是这题就是不一样,根本没有其他思路,所以继续推。
这时候我们可以分段处理 !就像高斯函数的分段性一样,如果每一段 的答案有相似性,就可以。
当取值范围很大的时候,尝试分段。
怎么分段?要使得每一段 的答案是相似的的,肯定要让每个点的取值范围在这段 中是相似的。那么一个点的取值范围是什么?。
要让 有相似性,想到在 处分段。
这样,在分出的五段内部,点 的取值范围都是仅和 有关的(而不是和 、 的大小关系也有关)或和 无关。
这样分段得到 个段,于是可以计算每个段的答案再求和。
勿忘初心:对于一个段的 ,我们要统计最小权值为 的答案。记 为权值在 之间的答案,我们所要求的就是 。
考虑 怎么求。因为 形式类似,只需考虑一个就行。
因为在一个段内,所以我们可以把每个点的取值范围都确定下来,形如 (这就是分了段的好处,上面没分段需要带 才能表示)。
我们发现:每个点的取值可能个数是关于 的一次函数。所以对于这一段的每一个 ,它作为参数给树赋值的方案数都可以看作一个相同的多项式。
如果求出了这个多项式 ,设当前这一段为 ,则这一段的总方案数就是 。
就算讲过然而到这里又卡住了 …… 果然是数学太菜了吧
因为每个点取值个数都是一次函数,所以 是一个 次多项式。令 ,则 是 次多项式。
关于对 是 次多项式的证明:CF622F The Sum of the k-th Powers 的参考
(粗略的说, 的差分是 次多项式,所以 是 次多项式)
既然 是 次多项式,而 很小只有 ,我们直接使用拉格朗日插值法,取 个点值就能求出 ,即 。
(取 的 值做前缀和即为 在对应处的点值)
好的,我们现在只剩最后一个问题:当 时,怎么求 。
当 确定了,每个点的点权取值范围(进而方案数)也就确定了。
表示 子树内选一条端点为 的路径并确定路径上点权的方案数。计算 时采用树上背包合并子树的方式,可以在合并子树时统计所有 LCA 为 的路径贡献的方案数。
方案点权和也可以类似计算。
参考资料
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!