E. Kamil and Making a Stream

这个题目要用到一个结论,就是区间一个区间长度为n的不同的gcd不会超过logn 个,

其实就是知道这个题目可以暴力就好了。

然后就是对于每一个节点,我都存从祖先到这个节点的所有的gcd,用一个vector存下来。

然后因为这个vector的size 不会很大,所以就可以直接暴力往下转移。

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <bitset>
#include <string>
#include <algorithm>
#include <iostream>
#include <map>
#define inf 0x3f3f3f3f
#define inf64 0x3f3f3f3f3f3f3f3f
using namespace std;
const int maxn = 1e5 + ;
const int mod = 1e9 + ;
typedef long long ll;
typedef pair<ll, ll> P;
vector<P>val[maxn];
vector<int>G[maxn];
ll a[maxn], ans; void add(int u, int v) {
G[u].push_back(v);
G[v].push_back(u);
} ll gcd(ll a, ll b) {
return b == ? a : gcd(b, a%b);
} void dfs(int u, int pre,int dep) {
for (int i = ; i < G[u].size(); i++) {
int v = G[u][i];
if (v == pre) continue;
for (int j = ; j < val[u].size(); j++) {
P now = val[u][j];
ll ans = gcd(now.first, a[v]);
int len = val[v].size();
if (len == || ans != val[v][len - ].first) val[v].push_back(make_pair(ans, now.second));
}
val[v].push_back(make_pair(a[v], dep + ));
dfs(v, u, dep + );
}
} void dfs1(int u, int pre) {
for (int i = ; i < val[u].size(); i++) {
ans += (val[u][i].second - val[u][i - ].second) % mod*val[u][i - ].first%mod;
ans %= mod;
}
ans += a[u] % mod;
ans %= mod;
for (int i = ; i < G[u].size(); i++) {
int v = G[u][i];
if (v == pre) continue;
dfs1(v, u);
}
}
/*
void dfsprint(int u, int pre) {
for (int i = 0; i < val[u].size(); i++) {
printf("ww u=%d %lld %lld\n", u, val[u][i].first, val[u][i].second);
}
for (int i = 0; i < G[u].size(); i++) {
int v = G[u][i];
if (v == pre) continue;
dfsprint(v, u);
}
}
*/ int main() {
int n;
scanf("%d", &n);
for (int i = ; i <= n; i++) scanf("%lld", &a[i]);
for (int i = ; i < n; i++) {
int u, v;
scanf("%d%d", &u, &v);
add(u, v);
}
val[].push_back(make_pair(a[], ));
dfs(, -, );
ans = ;
dfs1(, -);
// dfsprint(1, -1);
printf("%lld\n", ans);
return ;
}
 

E. Kamil and Making a Stream 区间gcd的更多相关文章

  1. Kamil and Making a Stream

    E. Kamil and Making a Stream 参考:Codeforces Round #588 (Div. 2)-E. Kamil and Making a Stream-求树上同一直径上 ...

  2. HDU 5726 GCD 区间GCD=k的个数

    GCD Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  3. Codeforces 914D - Bash and a Tough Math Puzzle 线段树,区间GCD

    题意: 两个操作, 单点修改 询问一段区间是否能在至多一次修改后,使得区间$GCD$等于$X$ 题解: 正确思路; 线段树维护区间$GCD$,查询$GCD$的时候记录一共访问了多少个$GCD$不被X整 ...

  4. bzoj 5028: 小Z的加油店——带修改的区间gcd

    Description 小Z经营一家加油店.小Z加油的方式非常奇怪.他有一排瓶子,每个瓶子有一个容量vi.每次别人来加油,他会让 别人选连续一段的瓶子.他可以用这些瓶子装汽油,但他只有三种操作: 1. ...

  5. dutacm.club 1094: 等差区间(RMQ区间最大、最小值,区间GCD)

    1094: 等差区间 Time Limit:5000/3000 MS (Java/Others)   Memory Limit:163840/131072 KB (Java/Others)Total ...

  6. HDU5381【莫队算法+区间GCD特性】

    前言: 主要最近在刷莫队的题,这题GCD的特性让我对莫队的使用也有了新的想法.给福利:神犇的一套莫队算法题 先撇开题目,光说裸的一个莫队算法,主要的复杂度就是n*sqrt(n)对吧,这里我忽略了一个左 ...

  7. 区间 GCD

    区间 GCD题目描述最近 JC 同学刚学会 gcd,于是迷上了与 gcd 有关的问题.今天他又出了一道这样的题目,想要考考你,你能顺利完成吗?给定一个长度为 n 的字符串 s[1..n],串仅包含小写 ...

  8. HDU 5726 GCD (2016多校、二分、ST表处理区间GCD、数学)

    题目链接 题意 : 给出一个有 N 个数字的整数数列.给出 Q 个问询.每次问询给出一个区间.用 ( L.R ) 表示.要你统计这个整数数列所有的子区间中有多少个和 GCD( L ~ R ) 相等.输 ...

  9. 区间gcd

    http://codeforces.com/problemset/problem/914/D 题意:给你n个数,两种操作:1.询问区间[l,r]在至多一次修改一个数的条件下区间gcd是否等于x. 2. ...

随机推荐

  1. PyCharm 项目打开窗口设置为当前还是新开一个怎么办?

     前言:       我找这个设置找了好久,后来在一篇博文中才找到,现在记录下来一下,顺便带图解释一下   设置步骤: File -> Setting -> Appearance & ...

  2. split(resource,limit) 中limit 的含义

    limit 参数控制模式应用的次数,因此影响结果数组的长度.如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后项将包含超出最后匹配的定界符的所有输入 ...

  3. golang trace 分析 简例

    今天,通过一个例子,一方面熟悉trace在自定义范围内的分析,另一方面golang 在协程调度策略上的浅析. Show Code // trace_example.go package main im ...

  4. 基于 Njmon + InfluxDB + Grafana 实现性能指标实时可视监控

    引言 最近逛 nmon 官网时,发现了一个新工具 njmon,功能与 nmon 类似,但输出为 JSON 格式,可以用于服务器性能统计. 可以使用 njmon 来向 InfluxDB 存储服务器性能统 ...

  5. unity3d之简单动画

    Unity3d中有两个关于动画的概念,Animation和Animator,看一下他们的创建和区别 1.创建一个物体后可以添加Animator和Animation组件如图所示 2.Animation和 ...

  6. ASE课程总结 by 朱玉影

    收获: 最大的收获应该就是对待选题要慎重吧,虽然前期做了一下调研,但是还是不够,所以到最后我们的项目才会不能公开发布,项目中间也是波折不断,导致我们走了很多弯路,浪费了很多时间吧.选题一定要慎重,慎重 ...

  7. 微信小程序基本知识

    逻辑实现 1 使用动态数据展示列表(可以考虑使用wx:for属性配合动态数组渲染全部列表项,以减少WXML页面的代码量) eg:  <view class='listGroup' wx:for= ...

  8. windows 系统使用技巧

    1 自定义发送到C:\Users\adm\AppData\Roaming\Microsoft\Windows\SendTo 2 自定义关机shutdown -s -t time,可写在快捷方式中shu ...

  9. 0day堆(2)堆的调试实验

    堆的调试实验 调试态堆管理策略和常态堆管理策略:前者只使用空表不用块表,不真实 使用调试器加载函数会触发前者 __asm int3 调试最真实的栈 未启用块表的堆区信息 堆区起始位置(假设为0x005 ...

  10. 必应每日图片api

    https://cn.bing.com/HPImageArchive.aspx?format=xml&cc=jp&idx=0&n=1 format   = 'xml' | 'j ...