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 ;
}
 

最新文章

  1. php嵌套数组递归搜索返回数组key
  2. IOS开始对App Store大扫除:你的APP更新了吗?
  3. C#访问url地址并返回数据
  4. How to disable certain HTTP methods (PUT, DELETE, TRACE and OPTIONS) in JBOSS7 .
  5. git分支管理和stash
  6. IIS功能查看、配置
  7. 2015WF有感
  8. Github for Windows使用图文教程_西西软件资讯
  9. Oracle数据库中的重要对象
  10. 翻煎饼 Stacks of Flapjacks
  11. libmemcached的安装及測试
  12. VISUALSVN: UNABLE TO CONNECT TO A REPOSITORY AT URL 无法连接主机的解决办法
  13. SpringMVC源码分析--容器初始化(四)FrameworkServlet
  14. Linux之Nginx使用
  15. PHP算法学习(7) 双向链表 实现栈
  16. python+appium里的等待时间
  17. java.lang.NoSuchMethodError 报500
  18. Vue基础知识简介
  19. Windows下面安装和配置Solr 4.9(二)
  20. mybatis 一二事(2) - 动态代理

热门文章

  1. AJ学IOS(35)UI之Quartz2D仿真支付宝手势解锁_代理获得密码。
  2. 腾讯云集群服务部署mysql并挂载到服务器
  3. PHP函数:get_class()
  4. Django文档阅读-Day1
  5. SQLyog-证书密钥
  6. Java环境下 selenium webDriver + chrome浏览器搭建与调试
  7. 简单了解下CAP定理与BASE定理
  8. 《Spring In Action》阅读笔记之核心概念
  9. 资料整理:python接口类
  10. 让所有网站都提供API的Python库:Toapi