ことばがありあまれどなお、 このゆめはつづい|

trsins

园龄:3年10个月粉丝:18关注:2

【做题记录】CF1101D GCD Counting

  • CF1101D GCD Counting 

    • 算法:树形 dp

题目:

给出一棵树,树有点权,共 n 个点,求树上的一条链,满足:链上所有点的点权的 gcd>1 且链上的点数最多。注意一个点也可以构成一条链。ai 表示第 i 个点的点值。

n2×105

题解:

首先不要去管 gcd 是多少,不用考虑重复计算。只要不互素。

对于每个节点 x,做一个很显然的数位 dp:用 fx,k 表示以 x 为根节点往下去挂出的点的点权都能被 k 整除的最长链。

那么答案显然就是 max{fx,k},x[1,n]

对于 f 的转移很简单,往下搜遇到点 y,ky 则更新继续搜,否则停止。

对于 k,因为显然这条链的 gcd (也就是 k)也是 ax 的因子,所以 kax 的质因子即可。

由于 ax2×105,而 2×3×5×7×11×13×17105,所以 k 的取值一共才 7 个,常数极小。

然后一边转移一边更新答案即可。

时间复杂度 O(7n)

本文作者:trsins

本文链接:https://www.cnblogs.com/trsins/p/15776612.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   trsins  阅读(28)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示