https://codeforces.com/contest/1101/problem/D

题意

一颗n个点的树,找出一条gcd>1的最长链,输出长度

题解

  • 容易想到从自底向长转移
  • 因为只需要gcd>1即可,所以定义\(dp[u][i]\)为u的子树中和u相连的gcd含有i的最长链长度,i为素因子
  • 这样对于每个点u,维护\(dp[u][i]\),用两条最长子链和u构成的链更新答案即可

代码

  1. #include<bits/stdc++.h>
  2. #define MAXN 200005
  3. using namespace std;
  4. map<int,int>dp[MAXN];
  5. int n,a[MAXN],u,v,ans,vi[MAXN];
  6. vector<int>fac[MAXN],G[MAXN];
  7. void init(){
  8. for(int i=2;i<MAXN;i++)
  9. if(!vi[i])
  10. for(int j=i;j<MAXN;j+=i)
  11. vi[j]=1,fac[j].push_back(i);
  12. }
  13. void dfs(int u,int fa){
  14. map<int,int>mx,mx2;
  15. for(auto v:G[u]){
  16. if(v==fa)continue;
  17. dfs(v,u);
  18. int g=__gcd(a[u],a[v]);
  19. for(auto x:fac[g]){
  20. dp[u][x]=max(dp[v][x],dp[u][x]);
  21. if(dp[v][x]>mx[x])mx2[x]=mx[x],mx[x]=dp[v][x];
  22. else if(dp[v][x]>mx2[x])mx2[x]=dp[v][x];
  23. ans=max(ans,mx[x]+mx2[x]+1);
  24. }
  25. }
  26. for(auto x:fac[a[u]]){
  27. dp[u][x]++;
  28. ans=max(dp[u][x],ans);
  29. }
  30. }
  31. int main(){
  32. init();
  33. cin>>n;
  34. for(int i=1;i<=n;i++)scanf("%d",&a[i]);
  35. for(int i=0;i<n-1;i++){
  36. scanf("%d%d",&u,&v);
  37. G[u].push_back(v);
  38. G[v].push_back(u);
  39. }
  40. dfs(1,0);
  41. cout<<ans;
  42. }

Educational Codeforces Round 58 (Rated for Div. 2) D 树形dp + 数学的更多相关文章

  1. Educational Codeforces Round 58 (Rated for Div. 2) 题解

    Educational Codeforces Round 58 (Rated for Div. 2)  题目总链接:https://codeforces.com/contest/1101 A. Min ...

  2. Educational Codeforces Round 58 (Rated for Div. 2) F dp + 优化(新坑) + 离线处理

    https://codeforces.com/contest/1101/problem/F 题意 有n个城市,m辆卡车,每辆卡车有起点\(s_i\),终点\(f_i\),每公里油耗\(c_i\),可加 ...

  3. Educational Codeforces Round 58 (Rated for Div. 2) G 线性基

    https://codeforces.com/contest/1101/problem/G 题意 一个有n个数字的数组a[],将区间分成尽可能多段,使得段之间的相互组合异或和不等于零 题解 根据线性基 ...

  4. Educational Codeforces Round 58 (Rated for Div. 2)

    A. Minimum Integer 水 #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) using name ...

  5. Educational Codeforces Round 58 (Rated for Div. 2) (前两题题解)

    感慨 这次比较昏迷最近算法有点飘,都在玩pygame...做出第一题让人hack了,第二题还昏迷想错了 A Minimum Integer(数学) 水题,上来就能做出来但是让人hack成了tle,所以 ...

  6. Educational Codeforces Round 59 (Rated for Div. 2) E 区间dp + 状态定义 + dp预处理(分步dp)

    https://codeforces.com/contest/1107/problem/E 题意 给出01字符串s(n<=100),相邻且相同的字符可以同时消去,一次性消去i个字符的分数是\(a ...

  7. Educational Codeforces Round 89 (Rated for Div. 2) B. Shuffle(数学/双指针)

    题目链接:https://codeforces.com/contest/1366/problem/B 题意 大小为 $n$ 的数组 $a$,除了 $a_x = 1$,其余 $a_i = 0$,依次给出 ...

  8. Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)

    #include<bits/stdc++.h>using namespace std;const long long mod=998244353;long long f[200007][2 ...

  9. Educational Codeforces Round 82 (Rated for Div. 2)E(DP,序列自动机)

    #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ],t[]; int n,m; ][]; ...

随机推荐

  1. 如何引入.graphql文件并优雅的使用fragment

    你还在为代码中放入长长的模版字符串所苦恼吗,如下图代码片段: ps:这个是grqphql client在nodejs后端项目的实践,如果你是在前端使用graphql,并使用了webpack,那么这些问 ...

  2. python 二叉树实现带括号的四则运算

    #!/usr/bin/python #* encoding=utf-8 s = "20-5*(0+1)*5^(6-2^2)" c = 0 top = [0,s[c],0] op = ...

  3. FreeMarker案例

  4. JS数据类型之Number类型

    Number类型的转换及方法 var num = 10; num.toString() //"10"转字符串,参数表示几进制 num.toFixed(2) //10.00 自动舍入 ...

  5. uniapp 标题后面紧跟一个标签的布局

    使用uni-app的时候,因为想用flex布局,所以一开始就设置了全部view display为flex. 之后遇到了如下这种样式: 开始想了半天没想出来,后来想到div span有这个效果. 然后就 ...

  6. hbuilder 打包 vueAPP

    1:设置状态栏颜色 在manifest.json 找到 plus 下添加 "statusbar": { "immersed": true/*沉浸式状态栏*/ 设 ...

  7. 使用pycharm 出现 interpreter field is empty 完美解决方法(转载 记录)

    使用pycharm 出现 interpreter field is empty 主要是因为你的电脑没有正确安装python或者安装python出错,重新下载安装覆盖就行 下载安装包:从Python的官 ...

  8. oslo_db使用

    oslo_db是openstak中封装数据库访问sqlachmy的模块,网上搜索的资源并不多,除了openstack官方文档,在实际使用中的例子凤毛麟角. 有感于资源太少,在学习heat源码的过程中, ...

  9. linux 安装 kafka&zookeeper

    安装kafka 1,下载kafka. #cd /usr/local #wget wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.1.1 ...

  10. 窗体背景和png

    窗体背景不要使用png格式图片,当窗体组件透明时,png会带来无穷的麻烦. 能不用png就不要用,截取图像也不要用Format32bppPArgb,特殊情况除外 Bitmap bkbmp = (Ima ...