Educational Codeforces Round 58 (Rated for Div. 2) D 树形dp + 数学
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构成的链更新答案即可
代码
#include<bits/stdc++.h>
#define MAXN 200005
using namespace std;
map<int,int>dp[MAXN];
int n,a[MAXN],u,v,ans,vi[MAXN];
vector<int>fac[MAXN],G[MAXN];
void init(){
for(int i=2;i<MAXN;i++)
if(!vi[i])
for(int j=i;j<MAXN;j+=i)
vi[j]=1,fac[j].push_back(i);
}
void dfs(int u,int fa){
map<int,int>mx,mx2;
for(auto v:G[u]){
if(v==fa)continue;
dfs(v,u);
int g=__gcd(a[u],a[v]);
for(auto x:fac[g]){
dp[u][x]=max(dp[v][x],dp[u][x]);
if(dp[v][x]>mx[x])mx2[x]=mx[x],mx[x]=dp[v][x];
else if(dp[v][x]>mx2[x])mx2[x]=dp[v][x];
ans=max(ans,mx[x]+mx2[x]+1);
}
}
for(auto x:fac[a[u]]){
dp[u][x]++;
ans=max(dp[u][x],ans);
}
}
int main(){
init();
cin>>n;
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=0;i<n-1;i++){
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
dfs(1,0);
cout<<ans;
}
Educational Codeforces Round 58 (Rated for Div. 2) D 树形dp + 数学的更多相关文章
- Educational Codeforces Round 58 (Rated for Div. 2) 题解
Educational Codeforces Round 58 (Rated for Div. 2) 题目总链接:https://codeforces.com/contest/1101 A. Min ...
- 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\),可加 ...
- Educational Codeforces Round 58 (Rated for Div. 2) G 线性基
https://codeforces.com/contest/1101/problem/G 题意 一个有n个数字的数组a[],将区间分成尽可能多段,使得段之间的相互组合异或和不等于零 题解 根据线性基 ...
- 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 ...
- Educational Codeforces Round 58 (Rated for Div. 2) (前两题题解)
感慨 这次比较昏迷最近算法有点飘,都在玩pygame...做出第一题让人hack了,第二题还昏迷想错了 A Minimum Integer(数学) 水题,上来就能做出来但是让人hack成了tle,所以 ...
- 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 ...
- 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$,依次给出 ...
- 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 ...
- 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; ][]; ...
随机推荐
- week05 codelab01 Babel ES6 webpack Nodejsserver等
Babel 他出现的原因就是很多浏览器还未完全兼容ES6 需要将你写的ES6的内容转换成ES5让浏览器兼容运行 ES5和ES6相比出现很多新内容 比如拼接字符串 ES6可以` ` 里面如果引用变量就用 ...
- Java与Netty实现高性能高并发
摘要: 1. 背景 1.1. 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程 ...
- Ubuntu上部署tomcat后无法访问8080端口问题
在tomacat的bin目录下,修改startup.sh文件,添加信息: #set java environment export JAVA_HOME=/usr/java/jdk1.8.0_111 e ...
- Redis安装教程及可视化工具RedisDesktopManager下载安装
Redis安装教程: 1. Windows下安装教程: 下载:https://github.com/MSOpenTech/redis/releases Redis 支持 32 位和 64 位.这个需要 ...
- jquery全选的选中和取消选中
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- SAP MM tables
Materials MARA - Material Master: General data MAKT - Material Master: Description MARM - Material M ...
- CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-6CM安装前环境检查
检查环境 在正式开始安装CDH之前最好先检查一下能不能相互免密ssh,以及防火墙是否关闭,集群中的时间是否统一,java版本是否是oracle的版本,主节点mysql是否安装正确等. ssh测试 例如 ...
- oralce 的安装以及plsql的配置的html连接
https://www.cnblogs.com/xkstudy/p/6400738.html
- vue 打包后本地先自己启动服务 anywhere 非常好用
:)nodejs服务器Anywhere Anywhere是一个随启随用的静态服务器,它可以随时随地将你的当前目录变成一个静态文件服务器的根目录. 一,安装node 在nodejs官网下载,安装后打开c ...
- go语言学习逻辑运算符if判断,iota的理解
第一天学习go语言,首先吐槽一下,配置go语言浪费了我两个小时的时间 不是在百度,就是在百度的路上,这里介绍一下我的go语言的版本和开发平台 go语言1.12版本,之前没有用过在早的版本了首先记录一下 ...