CF990G
题意
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的更多相关文章
- CF990G GCD Counting 点分治+容斥+暴力
只想出来 $O(nlogn\times 160)$ 的复杂度,没想到还能过~ Code: #include <cstdio> #include <vector> #includ ...
- 树上莫比乌斯反演+分层图并查集——cf990G
/* 树上莫比乌斯反演 求树上 满足 d|gcd(au,av) gcd(au,av)的对数f(d) 如何求: 建立200000层新图,即对于每个数建立一个新图 在加边时,给gcd(au,av)的约数层 ...
- GCD Counting Codeforces - 990G
https://www.luogu.org/problemnew/show/CF990G 耶,又一道好题被我浪费掉了,不会做.. 显然可以反演,在这之前只需对于每个i,统计出有多少(x,y),满足x到 ...
- CF990G-GCD Counting【dfs】
正题 题目链接:https://www.luogu.com.cn/problem/CF990G 题目大意 给出一棵有点权的树,对于每个\(k\)求有多条路径的点权\(gcd\)为\(k\) \(1\l ...
随机推荐
- Java实现简单的学生成绩管理系统
ScoreInformation.java import java.util.Scanner; class ScoreInformation { private String stunumber ...
- QT中加载动态链接库
一.添加第三方的头文件 这个问题再简单不过了,不过我还是要说下. 首先,添加头文件 #include "ControlCAN.h" 然后,再将这个头文件放到工程的目录下,就OK了 ...
- python列表(list)
#str #类,字符串 #name = "raitorei" #创建一个对象 #list #类,列表 ##############list类中提供的方法(灰魔法)######### ...
- 记mysql一次莫名的1062错误
1062 Duplicate entry '...' for key 'PRIMARY指的是主键重复或者唯一索引重复. 本来mysql表中未设主键和唯一索引,准备加上,但是设置的时候总是提示1062, ...
- eclipse中如何配置jdk
1.在eclipse的上方打开Windows这个选项,选择Preferences==>Java==>Installed JREs 2.然后选择Add==>Standard VM==& ...
- HashMap 原理解析
HashMap是由数组加链表的结合体.如下图: 图中可以看出HashMap底层就是一个数组结构,每个数组中又存储着链表(链表的引用) JDK1.6实现hashmap的方式是采用位桶(数组)+链表的方式 ...
- flask配置详解
直接修改config对象 flask会有一个可用的配置对象保存着载入的配置值: Flask 对象的 config 属性,这是 Flask 自己放置特定配置值的地方,也是扩展可以存储配置值的地方.但是, ...
- $HNOI2012\ $ 集合选数 状压$dp$
\(Des\) 求对于正整数\(n\leq 1e5\),{\(1,2,3,...,n\)}的满足约束条件:"若\(x\)在该子集中,则\(2x\)和\(3x\)不在该子集中."的子 ...
- 1069 微博转发抽奖 (20分)C语言
小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入格式: 输入第一行给出三个正整数 M(≤ 1000). ...
- 接口自动化测试框架 -- reudom
reudom Automated testing framework based on requests and unittest interface. 基于 Unittest 和 Requests ...