题意

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. 从头学pytorch(六):权重衰减

    深度学习中常常会存在过拟合现象,比如当训练数据过少时,训练得到的模型很可能在训练集上表现非常好,但是在测试集上表现不好. 应对过拟合,可以通过数据增强,增大训练集数量.我们这里先不介绍数据增强,先从模 ...

  2. 018 Ceph的mon和osd的删除和添加

    一.OSD管理 1.1 移出故障osd 查看当前节点的osd的id [root@ceph2 ceph]# df -hT Filesystem Type Size Used Avail Use% Mou ...

  3. 013 CephFS文件系统

    一.Ceph文件系统简介 CephFS提供兼容POSIX的文件系统,将其数据和与那数据作为对象那个存储在Ceph中 CephFS依靠MDS节点来协调RADOS集群的访问 元数据服务器 MDS管理元数据 ...

  4. 后缀自动机&回文自动机学习笔记

    在学了一天其实是边学边摆之后我终于大概$get$后缀自动机了,,,就很感动,于是时隔多年我终于决定再写篇学习笔记辽$QwQ$ $umm$和$FFT$学习笔记一样,这是一篇单纯的$gql$的知识总结博, ...

  5. 洛谷P2858 奶牛零食 题解 区间DP入门题

    题目大意: 约翰经常给产奶量高的奶牛发特殊津贴,于是很快奶牛们拥有了大笔不知该怎么花的钱.为此,约翰购置了 \(N(1 \le N \le 2000)\) 份美味的零食来卖给奶牛们.每天约翰售出一份零 ...

  6. 「洛谷P2891」[USACO07OPEN]吃饭Dining 解题报告

    P2891 [USACO07OPEN]吃饭Dining 题目描述 Cows are such finicky eaters. Each cow has a preference for certain ...

  7. SpringBootTest 测试工具

    以下内容,翻译自官方文档,并结合了学习过程的demo. Spring Boot提供了许多实用程序和注解,帮助测试应用程序.测试支持由两个模块提供:spring-boot-test 包含核心项,spri ...

  8. Java框架之Spring01-IOC-bean配置-文件引入-注解装配

    Spring 框架,即framework.是对特定应用领域中的应用系统的部分设计和实现的整体结构.就相当于让别人帮你完成一些基础工作,它可以处理系统很多细节问题,而且框架一般是成熟,稳健的. Spri ...

  9. es lucene搜索及聚合流程源码分析

    本文以TermQuery,GlobalOrdinalsStringTermsAggregator为例,通过代码,分析es,lucene搜索及聚合流程.1:协调节点收到请求后,将search任务发到相关 ...

  10. GeneXus 16 如何实现自动化测试和发布

    CI/CD(持续集成/持续发布)是一种软件开发策略,以使公司能够尽可能快速.高效地给客户发布新功能.为了能够实现CI/CD,就需要通过PipeLine对整个软件过程进行一系列的节点管理,必须将每个阶段 ...