题意

#include<bits/stdc++.h>
#define t 200000
#define MAXN 200100
using namespace std; int n;
int fa[MAXN],fa1[MAXN];
long long ans[MAXN],size[MAXN];
vector <int> e[MAXN],Edge[MAXN]; int find(int x){
if (x==fa1[x])
return fa1[x];
else
return fa1[x]=find(fa1[x]);
} void dfs(int x,int y){
int x1,x2;
x1=Edge[x].size();
for (int i=0;i<x1;i++){
x2=Edge[x][i];
if(x2==y)
continue;
fa[x2]=x;
dfs(x2,x);
}
} int main(){
scanf("%d",&n);
int x,y;
for (int i=1;i<=n;i++){
scanf("%d",&x);
e[x].push_back(i);
}
for (int i=1;i<=n-1;i++){
scanf("%d %d",&x,&y);
Edge[x].push_back(y);
Edge[y].push_back(x);
}
dfs(1,-1);
for (int i=1;i<=t;i++){
for (int j=i;j<=t;j+=i){
ans[i]+=e[j].size();
x=e[j].size();
for (int k=0;k<x;k++){
int y=e[j][k];
fa1[y]=y;
size[y]=1;
}
} for (int j=i;j<=t;j+=i){
x=e[j].size();
for (int k=0;k<x;k++){
int y=e[j][k];
if (y==1)
continue;
if (fa1[fa[y]]==0)
continue;
int x1=find(y);
int y1=find(fa[y]);
ans[i]=ans[i]+size[x1]*size[y1];
fa1[x1]=y1;
size[y1]+=size[x1];
}
} for (int j=i;j<=t;j+=i){
x=e[j].size();
for (int k=0;k<x;k++){
int y=e[j][k];
fa1[y]=0;
size[y]=0;
}
}
} for (int i=t;i>=1;i--)
for (int j=i*2;j<=t;j+=i)
ans[i]-=ans[j]; for (int i=1;i<=t;i++)
if (ans[i])
printf("%d %lld\n",i,ans[i]);
return 0;
}

  

cf 990G - GCD Counting的更多相关文章

  1. CodeForces - 990G GCD Counting

    Discription You are given a tree consisting of nn vertices. A number is written on each vertex; the ...

  2. CF EDU 1101D GCD Counting 树形DP + 质因子分解

    CF EDU 1101D GCD Counting 题意 有一颗树,每个节点有一个值,问树上最长链的长度,要求链上的每个节点的GCD值大于1. 思路 由于每个数的质因子很少,题目的数据200000&l ...

  3. CF1101D GCD Counting

    题目地址:CF1101D GCD Counting zz的我比赛时以为是树剖或者点分治然后果断放弃了 这道题不能顺着做,而应该从答案入手反着想 由于一个数的质因子实在太少了,因此首先找到每个点的点权的 ...

  4. Educational Codeforces Round 45 (Rated for Div. 2) G - GCD Counting

    G - GCD Counting 思路:我猜测了一下gcd的个数不会很多,然后我就用dfs回溯的时候用map暴力合并就好啦. 终判被卡了MLE.....  需要每次清空一下子树的map... #inc ...

  5. GCD Counting Codeforces - 990G

    https://www.luogu.org/problemnew/show/CF990G 耶,又一道好题被我浪费掉了,不会做.. 显然可以反演,在这之前只需对于每个i,统计出有多少(x,y),满足x到 ...

  6. CF1101D GCD Counting(数学,树的直径)

    几个月的坑终于补了…… 题目链接:CF原网  洛谷 题目大意:一棵 $n$ 个点的树,每个点有点权 $a_i$.一条路径的长度定义为该路径经过的点数.一条路径的权值定义为该路径经过所有点的点权的 GC ...

  7. CF 954H Path Counting

    H. Path Counting time limit per test 5 seconds memory limit per test 256 megabytes input standard in ...

  8. CodeForces - 1101D:GCD Counting (树分治)

    You are given a tree consisting of n vertices. A number is written on each vertex; the number on ver ...

  9. CF#338D. GCD Table

    传送门 简单的中国剩余定理练习. 首先行数一定是$lcm$,然后只要确定最小的列数就能判定解合不合法了. 我们可以得到线性模方程组: $y \equiv 0 \pmod{a_1}$ $y+1 \equ ...

随机推荐

  1. 本地上传项目到github

    https://www.cnblogs.com/rosej/p/6056467.html(copy)

  2. 在linux上安装MySQL数据库,并简单设置用户密码,登录MySQL

    在新装的Centos系统上安装MySQL数据库. <p><a href="http://www.cnblogs.com/tijun/">提君博客原创< ...

  3. CSS硬件加速的好与坏

    本文翻译自Ariya Hidayat的Hardware Accelerated CSS: The Nice vs The Naughty.感谢Kyle He帮助校对. 每个人都痴迷于60桢每秒的顺滑动 ...

  4. 爬虫 之Requests库的详细使用

    1.什么是Requests? Requests是用Python语言编写的,基于urllib3来改写的,采用Apache2 Licensed 来源协议的HTTP库. 它比urllib更加方便,可以节约我 ...

  5. PhpStorm本地断点调试

    一.断点调试php环境搭建 1.检测本地php环境是否安装了Xdebug 在本地输出phpinfo():搜索Xdebug;如下图  如果没有安装,安装操作Xdebug如下: 将phpinfo();的信 ...

  6. SQL Server 只安装客户端的方法

    只安装管理工具

  7. Js 布尔值操作符

    在js中,逻辑与(&&) 和 逻辑或(||)可以对任意的数据类型进行操作,而在高级程序设计中只给出了一系列的规则,并没有进行解释,所以经常记不住.在读其它书籍的时候,读到了它的原理,其 ...

  8. BZOJ 1800 [Ahoi2009]fly 飞行棋

    题目链接 思路 终于有一道自己想出来的题了,开心. 因为是矩形,一定有直角,所以考虑直径,之后由于矩形对角线是两条直径,所以考虑组合数. 直径有n条,矩形有c(n,2)个. #include<i ...

  9. Qt 事件

    Qt 的事件处理,实际上是有五个层次: 重写 paintEvent().mousePressEvent() 等事件处理函数.这是最普通.最简单的形式,同时功能也最简单. 重写 event() 函数.e ...

  10. UNIX口令破解机

    在编写我们的UNIX口令破解机时,我们需要使用UNIX 计算口令hash 的crypt()算法.Python 标准库中已自带有crypt 库.要计算一个加密的UNIX 口令hash,只需调用函数cry ...