题意

#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. 如何让pl/sql developer记住密码,实现快速登录

    前两天,有同事使用plsql的时候,切换数据库的时候需要不断的重复输入密码,这样太麻烦了. 下面,我这里说下如何的实现plsql不需要输入密码就能快速登录的方法: 1.一开始登录,首先像往常那样输入密 ...

  2. 【译】Focused and Diffuse Modes(专注与发散模式)

    Focused and Diffuse Modes ---文章来源:coursera 面对一个问题,当无论如何都想不出办法时,你会怎么做呢?对于僵尸们来说,只需简单地不断用脑袋撞墙即可.然而活生生的大 ...

  3. Linux基础学习笔记3-用户权限

    本章内容 用户user 令牌token,identity Linux用户:Uername/UID 管理员:root,0 普通用户:1-65535 系统用户:1-499,1-999(Centos7) 对 ...

  4. python数据结构与算法第六天【栈与队列】

    1.栈和队列的原理 栈:后进先出(LIFO),可以使用顺序表和链表实现 队列:先进先出(FIFO),可以使用顺序表和链表实现 2.栈的实现(使用顺序表实现) #!/usr/bin/env python ...

  5. string.Format出现异常:输入字符串的格式不正确 Exception during StringFormat

    错误信息:Exception during StringFormat:输入字符串的格式不正确 “System.FormatException”类型的未经处理的异常在 mscorlib.dll 中发生 ...

  6. Ubuntu install flash

    Software&Updates - Other Software - Canonical Parners sudo apt install adobe-flashplugin

  7. python基础数据类型--list列表

    列表: 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li = [‘alex ...

  8. C#使用读写锁解决多线程并发写入文件时线程同步的问题

    读写锁是以 ReaderWriterLockSlim 对象作为锁管理资源的,不同的 ReaderWriterLockSlim 对象中锁定同一个文件也会被视为不同的锁进行管理,这种差异可能会再次导致文件 ...

  9. python 模块之-ffmpeg 中文参数对照表

    a) 通用选项 -L license-h 帮助-fromats 显示可用的格式,编解码的,协议的...-f fmt 强迫采用格式fmt-I filename 输入文件-y 覆盖输出文件-t durat ...

  10. 洛谷P2084 进制转换

    题目背景 无 题目描述 今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 : 1*2^4+0*2^3+1*2^2+0*2^1+1*2^0, 那么请你编程实现,将一个M进制的 ...