题解 CF1101D GCD Counting

博客详细解析了CF1101D GCD Counting问题,通过筛选质因数和树形DP解决求最大点数链的问题。在dp过程中,博主强调了状态定义、转移方程以及特殊情况的处理,如所有点权为1的情况。文章结尾分享了调试过程中的教训。
摘要由CSDN通过智能技术生成

题解 CF1101D GCD Counting

Date 2019.8.2


题目大意

给出一棵树,树有点权,求树上的一条链满足:链上所有点的点权的gcd>1,且链上的点数最多(注意一个点也可以构成一条链)

思路

题目要求gcd>1,也就是说这条链上的所有的点的点权都能被一个共同的质因数整除
又因为a[i]<=2*105,所以我们可以筛出这个范围内的所有质数,同时还能找出每个a[i]所有的质因数。
接下来,我们只要跑一个树形dp,求出答案就好。
下面是关于dp的详情:

  • 状态

    我们定义f[x][i2]为表示x往下挂出的点权都能被x的第i2个质因数整除的最长链。
  • 转移

    我们枚举 x的儿子o,x的质因数序号i2,o的质因数序号i3(通过计算可以得出a[i]的质因数数量很少,可以暴力枚举每一个
    显然,如果s[x][i2]=s[o][i3](s数组用来存储质因数),那么就有:
    a n s = m a x ( a n s , f [ x ] [ i 2 ] + f [ o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值