cf1101 D. GCD Counting(树形dp) 题意: 在树中找一条最长的链,链上所有点的点权的gcd大于1。 思路: 每个数的质因子数量是非常少的,可以认为是个位数。因为2×3×5一直乘到19就快1e7了。 p[u][j]p[u][j]为编号为uu的节点的第jj个质因子 dp[u][i]dp[u][i]表示以uu为一个端点,uu的子树中...
CF1101D GCD Counting 题目传送门题目大意有一颗树,每个节点有一个值,问树上最长链的长度,要求链上的每个节点之间的 gcdgcd 大于11。思路这道题其实可以用点分治来做,在这里就不讲点分治的做法了,我们直接来讲树形 dp(因为强制要求 dp 来做)。定义状态:首先分析一下题目。发现求出最大值唯一的要求就是每个 ...
dfs函数比较好的写法是 voiddfs(intu){vis[u]=true;intt=a[u];map<int,int>b1,b2;FOR(x,p[t]){f[u][x]=1,ans=max(ans,1);}FOR(v,g[u]){if(!vis[v]){dfs(v);FOR(x,p[t]){autoiter=f[v].find(x);if(iter!=f[v].end()){inttmp=iter->second;ans=max(ans,f[u][v]+tm...
CF990G. GCD Counting 题意 有nnn个点的一棵树,每个点有一个权值,对于每一个iii,问g(x,y)=ig(x,y)=ig(x,y)=i的(x,y)(x,y)(x,y)对数(x≤y)(x\leq y)(x≤y).g(x,y)g(x,y)g(x,y)表示xxx到yyy的路径上的所有aia_iai的gcdgcdgcd。 题解 Tip1 点分治:对每一个点统计到...
CF1101D GCD Counting 题目链接 题意分析 求解最长路径的问题 我们可以使用DP 但是这里求GCD比较恶心 我们可以转换思路 gcd(x,y)≠1 说明x,y之间必然存在公共质因子 那么我们可以通过枚举质因子代替gcd 由于2×3×5×7×11×13×17×19=9699690>200000 所以枚举质因子对于复杂度几乎无影响...
CF1101D GCD Counting(数学,树的直径) 几个月的坑终于补了…… 题目链接:CF原网洛谷 题目大意:一棵nn个点的树,每个点有点权aiai。一条路径的长度定义为该路径经过的点数。一条路径的权值定义为该路径经过所有点的点权的 GCD。问所有权值不为11的路径中,最长的长度。
题意:求最长的树上路径点值的gcdgcd不为11的长度. 由于只要求gcdgcd不为一,所以只要gcdgcd是一个大于等于22的质数的倍数就可以了. 而我们发现2×1052×105以内的数最多只会有77~88个本质不同的质因子,所以我们在点分治的时候暴力拆质因子并维护一些桶即可. ...
CF EDU 1101D GCD Counting 题意 有一颗树,每个节点有一个值,问树上最长链的长度,要求链上的每个节点的GCD值大于1。 思路 由于每个数的质因子很少,题目的数据200000<2*3*5*7*11*13*17=510510。所以每个节点的质因子个数不多。那么树形DP的时候
CF1101D GCD Counting 枚举出每个数的权值的质因子。 对每个质因子建树求一遍直径,这样做的复杂度显然均摊后是n*logn的,因为每个点最多只会被拆成logn个点。 口胡的,没代码qwq