E. Kamil and Making a Stream 区间gcd
2024-09-07 14:02:25
这个题目要用到一个结论,就是区间一个区间长度为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 ;
}
最新文章
- php嵌套数组递归搜索返回数组key
- IOS开始对App Store大扫除:你的APP更新了吗?
- C#访问url地址并返回数据
- How to disable certain HTTP methods (PUT, DELETE, TRACE and OPTIONS) in JBOSS7 .
- git分支管理和stash
- IIS功能查看、配置
- 2015WF有感
- Github for Windows使用图文教程_西西软件资讯
- Oracle数据库中的重要对象
- 翻煎饼 Stacks of Flapjacks
- libmemcached的安装及測试
- VISUALSVN: UNABLE TO CONNECT TO A REPOSITORY AT URL 无法连接主机的解决办法
- SpringMVC源码分析--容器初始化(四)FrameworkServlet
- Linux之Nginx使用
- PHP算法学习(7) 双向链表 实现栈
- python+appium里的等待时间
- java.lang.NoSuchMethodError 报500
- Vue基础知识简介
- Windows下面安装和配置Solr 4.9(二)
- mybatis 一二事(2) - 动态代理