CF1101D GCD Counting(数学,树的直径)
几个月的坑终于补了……
题目大意:一棵 $n$ 个点的树,每个点有点权 $a_i$。一条路径的长度定义为该路径经过的点数。一条路径的权值定义为该路径经过所有点的点权的 GCD。问所有权值不为 $1$ 的路径中,最长的长度。
$1\le n\le 2\times 10^5,1\le a_i\le 2\times 10^5$。
我可能是数据结构学傻了,一眼点分治……然后复杂度又不对……
正解:我们发现只要 $\gcd$ 不为 $1$ 就行了,而两个数的 $\gcd$ 不为 $1$ 当且仅当他们两个有共有的质因子。
类比树的直径。每个点两个 vector,令 $pr[u]$ 表示 $a_u$ 的质因子集合(不重复),$len[u][i]$ 表示从 $u$ 向子树下面走,路径 $\gcd$ 含有 $a_u$ 的第 $i$ 个质因子的最长长度。
(有点说不清楚,看代码吧)
合并时与树的直径类似,就是拿一个子树和前面所有子树更新答案,再用这个子树更新 $u$ 点的 $len$。
具体看代码。时间复杂度 $O(n(\sqrt{a_i}+\log^2(a_i)))$。实际上会比这个上界小。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=;
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
inline int read(){
char ch=getchar();int x=,f=;
while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
return f?-x:x;
}
int n,a[maxn],el,head[maxn],to[maxn*],nxt[maxn*],ans;
vector<int> pr[maxn],len[maxn];
inline void add(int u,int v){
to[++el]=v;nxt[el]=head[u];head[u]=el;
}
void dfs(int u,int f){
for(int i=;i*i<=a[u];i++)
if(a[u]%i==){
pr[u].push_back(i);
len[u].push_back();
ans=max(ans,);
while(a[u]%i==) a[u]/=i;
}
if(a[u]>) pr[u].push_back(a[u]),len[u].push_back(),ans=max(ans,);
for(int i=head[u];i;i=nxt[i]){
int v=to[i];
if(v==f) continue;
dfs(v,u);
FOR(x,,(int)pr[u].size()-) FOR(y,,(int)pr[v].size()-){
if(pr[u][x]!=pr[v][y]) continue;
ans=max(ans,len[u][x]+len[v][y]);
len[u][x]=max(len[u][x],len[v][y]+);
}
}
}
int main(){
n=read();
FOR(i,,n) a[i]=read();
FOR(i,,n-){
int u=read(),v=read();
add(u,v);add(v,u);
}
dfs(,);
printf("%d\n",ans);
}
CF1101D GCD Counting(数学,树的直径)的更多相关文章
- CF1101D GCD Counting
题目地址:CF1101D GCD Counting zz的我比赛时以为是树剖或者点分治然后果断放弃了 这道题不能顺着做,而应该从答案入手反着想 由于一个数的质因子实在太少了,因此首先找到每个点的点权的 ...
- CodeForces - 1101D:GCD Counting (树分治)
You are given a tree consisting of n vertices. A number is written on each vertex; the number on ver ...
- CodeForces990G:GCD Counting(树分治+GCD)
You are given a tree consisting of nn vertices. A number is written on each vertex; the number on ve ...
- CF1101D GCD Counting 点分治+质因数分解
题意:求最长的树上路径点值的 $gcd$ 不为 $1$ 的长度. 由于只要求 $gcd$ 不为一,所以只要 $gcd$ 是一个大于等于 $2$ 的质数的倍数就可以了. 而我们发现 $2\times 1 ...
- [CSP-S模拟测试]:Walk(树的直径+数学)
题目描述 给定一棵$n$个节点的树,每条边的长度为$1$,同时有一个权值$w$.定义一条路径的权值为路径上所有边的权值的最大公约数.现在对于任意$i\in [1,n]$,求树上所有长度为$i$的简单路 ...
- 牛客练习赛40 C 小A与欧拉路(树的直径)
链接:https://ac.nowcoder.com/acm/contest/369/C 题目描述 小A给你了一棵树,对于这棵树上的每一条边,你都可以将它复制任意(可以为0)次(即在这条边连接的两个点 ...
- Building Fire Stations ZOJ - 3820 (二分,树的直径)
大意: 给定树, 求两个点, 使得所有其他的点到两点的最短距离的最大值尽量小. 二分答案转为判定选两个点, 向外遍历$x$的距离是否能遍历完整棵树. 取直径两段距离$x$的位置bfs即可. #incl ...
- hdu 4514 湫湫系列故事――设计风景线(求树的直径)
随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好. 现在已经勘探确定了n个位置 ...
- BZOJ2657 [Zjoi2012]旅游(journey) 【树的直径】
题目 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示,N个顶点表示N个入境/出境口 ...
随机推荐
- Hogp连接流程分析
当BLE设备已经完成配对,并且完成GATT服务的搜索,下一步就开始profile 的连接流程了,一般LE设备都是走的HOGP的流程,我们这篇文章就分析一下hogp的连接流程. 连接是从framewor ...
- tomcat相关配置技巧梳理 (修改站点目录、多项目部署、限制ip访问、大文件上传超时等)
tomcat常用架构:1)nginx+tomcat:即前端放一台nginx,然后通过nginx反向代理到tomcat端口(可参考:分享一例测试环境下nginx+tomcat的视频业务部署记录)2)to ...
- zabbix监控-基本原理介绍
一.Linux下开源监控系统简单介绍1)cacti:存储数据能力强,报警性能差2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中.比如,连续采样数据存 ...
- 12.26daily_scrum
尽管最近是众多大作业集中爆发deadline的紧要关头,队员们依旧热情高涨,投入良多,纷纷为产品发布出谋划策. 具体工作: 小组成员 今日任务 工作时间 李睿琦 软件调试过程总结 2 左少辉 滑锁密码 ...
- leetcode 730 Count Different Palindromic Subsequences
题目链接: https://leetcode.com/problems/count-different-palindromic-subsequences/description/ 730.Count ...
- 第二个spring
由于第一个spring已经完成,我们现在进去第二个spring! 陈志棚:成绩的统筹 李天麟:界面音乐 徐侃:代码算法 plan好布局,分配任务,控制时间!
- 第一次Spring总结
第一阶段:下载了类似app使用,并做了对比,分析,对自己的app有了一些构思,完成了环境的配置.在这一阶段,一开始只有两个女生显得有点弱,面对从未接触过的app项目,首先就是配置环境方面的,在经过班上 ...
- 开始第一段SPRINT
四则运算Sprint计划 1.小组成员: 李豌湄:master 江丹仪:产品负责人 2.现状: 初步有一个四则运算的程序代码, 我们这个团队的编程基础比较薄弱,还不知道怎么将程序与数据库连接,也是在边 ...
- 什么是Consul
什么是Consul Consul文档简要整理 什么是Consul? Consul是一个用来实现分布式系统的服务发现与配置的开源工具.他主要由多个组成部分: 服务发现:客户端通过Consul提供服务,类 ...
- SpringMvc配置扫包之后,访问路径404问题解决
场景: 1. 配置了Spring和SpringMvc, Spring管理非Controller类的Bean, SpringMvc管理涉及的Controller类 2. web.xml已经配置了Spri ...