题意

https://codeforces.com/contest/990/problem/G


思考

在200000以内,因数个数最多的数位166320,共有160个因数。可以知道,从一个节点向下走最多只会有160种取值。

记集合f[u]为从u节点向下走可以取得的所有值及其个数,暴力转移即可。

至于合并,博主写了平方.......但这题想造出极端数据也是困难的。

最后注意空间。


代码

 #include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int maxn=2E5+;
const ll base=2E5+;
int n,val[maxn];
int head[maxn*],size;
ll ans[maxn],wait[maxn];
bool vis[maxn];
inline int gcd(int x,int y)
{
return x%y==?y:gcd(y,x%y);
}
struct edge
{
int to,next;
}E[maxn*];
inline void add(int u,int v)
{
E[++size].to=v;
E[size].next=head[u];
head[u]=size;
}
struct note
{
int x,c;
note(int a=,int b=)
{
x=a,c=b;
}
};
queue<note>T[maxn];
vector<note>t;
void dfs(int u,int F)
{
vector<int>what;
for(int i=head[u];i;i=E[i].next)
{
int v=E[i].to;
if(v==F)
continue;
dfs(v,u);
}
for(int i=head[u];i;i=E[i].next)
{
int v=E[i].to;
if(v==F)
continue;
t.clear();
while(!T[v].empty())
{
t.push_back(T[v].front());
T[v].pop();
}
for(int j=;j<what.size();++j)
{
int x=what[j];
for(int k=;k<t.size();++k)
ans[gcd(x,t[k].x)]+=wait[x]*t[k].c;
}
for(int j=;j<t.size();++j)
{
int x=gcd(val[u],t[j].x);
if(!vis[x])
{
vis[x]=;
wait[x]=t[j].c;
what.push_back(x);
}
else
wait[x]+=t[j].c;
}
}
if(!vis[val[u]])
{
vis[val[u]]=;
wait[val[u]]=;
what.push_back(val[u]);
}
else
++wait[val[u]];
for(int i=;i<what.size();++i)
{
ll x=what[i];
ans[x]+=wait[x];
T[u].push(note(x,wait[x]));
vis[x]=wait[x]=;
}
}
int get(int x)
{
int sum=;
for(int i=;i*i<=x;++i)
if(x%i==)
sum+=;
return sum;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n;
for(int i=;i<=n;++i)
cin>>val[i];
for(int i=;i<=n-;++i)
{
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}
dfs(,);
for(int i=;i<=;++i)
if(ans[i])
cout<<i<<" "<<ans[i]<<endl;
return ;
}

CF990G的更多相关文章

  1. CF990G GCD Counting 点分治+容斥+暴力

    只想出来 $O(nlogn\times 160)$ 的复杂度,没想到还能过~ Code: #include <cstdio> #include <vector> #includ ...

  2. 树上莫比乌斯反演+分层图并查集——cf990G

    /* 树上莫比乌斯反演 求树上 满足 d|gcd(au,av) gcd(au,av)的对数f(d) 如何求: 建立200000层新图,即对于每个数建立一个新图 在加边时,给gcd(au,av)的约数层 ...

  3. GCD Counting Codeforces - 990G

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

  4. CF990G-GCD Counting【dfs】

    正题 题目链接:https://www.luogu.com.cn/problem/CF990G 题目大意 给出一棵有点权的树,对于每个\(k\)求有多条路径的点权\(gcd\)为\(k\) \(1\l ...

随机推荐

  1. Android一般什么情况下会导致内存泄漏

    资料参考:https://blog.csdn.net/u011479990/article/details/78480091 内存泄漏的原因在于生命周期长的对象持有了生命周期短的对象的引用 内存泄漏形 ...

  2. 22.XML

    转载:https://www.cnblogs.com/yuanchenqi/article/5732581.html xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用 ...

  3. jsp中点击一个图片跳转到另一个页面的方法

    1.这是jsp页面中的关于图片的那段代码 <img src="images/tj1.png " id="tj1"></img> 2.跳转 ...

  4. TVP访谈 | 贝壳金服史海峰:中台虽百家争鸣,但不是所有企业必需品

    导语 | 中台作为一个技术概念,曾一度被捧得火热.那么,中台现在发展到了什么阶段呢?对于所有企业来讲,中台都是普适的么?中台在具体的落地过程中,究竟存在哪些问题呢?腾讯云最具价值专家(TVP)史海峰, ...

  5. 斜率优化入门题题单$QwQ$

    其实就是这一篇的那个例题帕的大部分题目的题解就写这儿辣,,, 因为都是些基础题不想专门给写题解,,,但是又掌握得差不得不写,,, 麻油办法就写一块儿好辣$QwQ$ 当然辣比较难的我就没放进来辣$QwQ ...

  6. 在C#中使用二叉树实时计算海量用户积分排名的实现

    从何说起 前些天和朋友讨论一个问题,他们的应用有几十万会员然后对应有积分,现在想做积分排名的需求,问有没有什么好方案.这个问题也算常见,很多地方都能看到,常规做法一般是数据定时跑批把计算结果到中间表然 ...

  7. 《带你装B,带你飞》pytest成神之路2- 执行用例规则和pycharm运行的三种姿态

    1. 简介 今天北京下的雪好大好美啊!!!哎呀,忘记拍照片了,自己想象一下吧.言归真传,今天还是开始pytest的学习和修炼,上一篇写完后群里反响各式各样的,几家欢乐几家愁,有的高兴说自己刚好要用到了 ...

  8. 机器学习之路--Numpy

    常用代码 ndarray.dtype 数据类型必须是一样的 常用代码 import numpy #numpy读取文件 world_alcohol = numpy.genfromtxt("wo ...

  9. 5.pycharm中导入第三方模块的方法

    最近刚入门学习python,网上查找了一些资料,发现python编程用的软件pycharm还是比较多的,于是就跟随大众,学习使用pycharm,在学习的过程中,想要导入第三方模块pyperclip,但 ...

  10. eclipse maven工程错误总汇

    1.问题: Target runtime Apache Tomcat v7.0 is not defined 解决方法:           right click on your project & ...