newcoder-最长树链-树/gcd
https://ac.nowcoder.com/acm/problem/13233
链接:https://ac.nowcoder.com/acm/problem/13233
来源:牛客网
题目描述
输入描述:
第1行:整数n(1 ≤ n ≤ 100000),表示点的个数。
第2~n行:每行两个整数x,y表示xy之间有边,数据保证给出的是一棵树。
第n+1行:n个整数,依次表示点1~n对应的权值(1 ≤ 权值 ≤ 1,000,000,000)。
输出描述:
满足最长路径的长度
输出
3 这条链的gcd>1,反过来说就是对于链上每个点,都可以写成k*p的形式,p就是他们的最大公约数,显然满足k*p也一定
满足k*pi(p%pi==0).所以可以以质因子对节点进行分类,具有相同质因子的点分在一类,对每一类点跑一次最长链即可。
每个点被访问次数就是他的质因子个数,复杂度大约就是N*log(N)。
#include<bits/stdc++.h>
using namespace std;
#define LL long long
unordered_map<int,vector<int> >g;
const int maxn=;
int n,val[maxn];
bool vis[maxn];
vector<int>e[maxn];
int dfs(int u,int p){
vis[u]=;
int m1=,m2=;
for(auto v:e[u]){
if(vis[v] || val[v]%p!=)continue;
int d=dfs(v,p);
if(d>m1) {
m2=m1;
m1=d;
}
else if(d>m2){
m2=d;
}
}
return m1+m2+;
}
int solve(int u){
int res=;
for(auto x:g[u]){
if(!vis[x]){
res=max(res,dfs(x,u));
}
}
for(auto x:g[u]){
vis[x]=;
}
return res;
}
int main(){
int u,v;
cin>>n;
for(int i=;i<n;++i){
scanf("%d%d",&u,&v);
e[u].push_back(v);
e[v].push_back(u);
}
for(int i=;i<=n;++i){
scanf("%d",val+i);
int x=val[i];
for(int v=;v*v<=x;v++){
if(x%v==){
while(x%v==)x/=v;
g[v].push_back(i);
}
}
if(x>){
g[x].push_back(i);
}
} int ans=;
for(auto i:g){
ans=max(ans,solve(i.first));
}
cout<<ans;
return ;
}
newcoder-最长树链-树/gcd的更多相关文章
- codechef Dynamic GCD [树链剖分 gcd]
Dynamic GCD 题意:一棵树,字词树链加,树链gcd 根据\(gcd(a,b)=gcd(a,a-b)\) 得到\(gcd(a_1, a_2, ..., a_i) = gcd(a_1, a_1- ...
- [SinGuLaRiTy] 树链问题
[SinGuLaRiTy-1035] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 关于树链 树链是什么?这个乍一看似乎很陌生的词汇表达的其 ...
- [美团 CodeM 初赛 Round A]最长树链
题目大意: 给你一棵带点权的树,找出一个最长的树链满足链上点权的最大公因数不为1. 思路: 暴力DP. 对于每个点,记录一下以这个点为一个端点的所有链的最大公因数及长度. 然后暴力转移一下,时间复杂度 ...
- BZOJ.3653.谈笑风生(长链剖分/线段树合并/树状数组)
BZOJ 洛谷 \(Description\) 给定一棵树,每次询问给定\(p,k\),求满足\(p,a\)都是\(b\)的祖先,且\(p,a\)距离不超过\(k\)的三元组\(p,a,b\)个数. ...
- 树链剖分-点的分治(点数为k且距离最长的点对)
hdu4871 Shortest-path tree Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 130712/130712 K ( ...
- 「美团 CodeM 初赛 Round A」最长树链
题目描述 Mr. Walker 最近在研究树,尤其是最长树链问题.现在树中的每个点都有一个值,他想在树中找出最长的链,使得这条链上对应点的值的最大公约数不等于1.请求出这条最长的树链的长度. 输入格式 ...
- 树链剖分 (求LCA,第K祖先,轻重链剖分、长链剖分)
2020/4/30 15:55 树链剖分是一种十分实用的树的方法,用来处理LCA等祖先问题,以及对一棵树上的节点进行批量修改.权值和查询等有奇效. So, what is 树链剖分? 可以简单 ...
- 5.15 牛客挑战赛40 E 小V和gcd树 树链剖分 主席树 树状数组 根号分治
LINK:小V和gcd树 时限是8s 所以当时好多nq的暴力都能跑过. 考虑每次询问暴力 跳父亲 这样是nq的 4e8左右 随便过. 不过每次跳到某个点的时候需要得到边权 如果直接暴力gcd的话 nq ...
- BZOJ 1984: 月下“毛景树” [树链剖分 边权]
1984: 月下“毛景树” Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 1728 Solved: 531[Submit][Status][Discu ...
随机推荐
- 2018.5.15Html标签初学
body标签 -图标: :(一个空格)>:(表示>)<:(表示<) -p标签:段落的划分 -br标签:换行 标签分为块级标签和行内标签. 块级标签: ...
- 软件综合实践Axure介绍
首先就是下载安装Axure这款软件了,在百度上搜索“”Axure rp下载“”即可,下载完成后,打开exe安装,根据步骤一步步点击下一步即可完成安装. 运行该软件时会出现类似于填写激活码的东西,这时依 ...
- shellinabox
https://linux.cn/article-6046-1.html https://www.tecmint.com/shell-in-a-box-a-web-based-ssh-terminal ...
- React 列表页面传递参数
React 列表进入详情页面 首先安装 react-router-dom (4.0) npm/yarn install react-router-dom 路由跳转配置 列表 父组件 this.prop ...
- what i want
i want to be the object of every beautiful creature. they strongly want to talk with me, and study f ...
- linux 安装oracle
报错1:报display相关错误su - oracleDISPLAY=redhat64-2:1 --此处为远程会话地址(可以写localhost或IP均可)export DISPLAYcd /home ...
- topcoder srm 630 div1 (2-SAT and SCC template)
problem1 link 首先计算任意两点的距离.然后枚举选出的集合中的两个点,判断其他点是否可以即可. problem2 link 假设字符串为$s$,长度为$n$.那么对于$SA$中的两个排名$ ...
- linux下ifconfig命令看不到IP centos7——ens33
当前环境VMware15+centos7 在终端输入ifconfig后没有开到IP地址: 解决方法:root用户执行命令 cd /etc/sysconfig/network-scripts/ vi ...
- js添加的元素无法触发click事件
动态生成的元素,使用.on绑定事件,比如$(document).on("click",".divclick",function(){})
- yii 动态增加路由规则
使用 UrlManager类的addRules方法. 如 $url->addRules([ 'zzz/<id:\d+>' => '/test/hi', ]); 这个规则必须在开 ...