传送门

文章目录

  • 题意:
  • 思路:

题意:

给你一颗树,其中根是111,每个点有一个点权,求每个点到根的所有路径的gcdgcdgcd之和。
n≤1e5n\le1e5n≤1e5

思路:

一看到以为是个点分治,让后发现不是任意点对所以显然不能用点分治来做。
后来想了半天也只想到一个暴力,没想到还真是个暴力。
考虑从根到点iii的路径上同的gcdgcdgcd个数,可以证明最多有log2(1012)log_2(10^{12})log2​(1012)个,所以每个点都继承一下父节点的值即可,由于需要用mapmapmap维护,所以复杂度O(nlog22(1012))O(nlog^2_2(10^{12}))O(nlog22​(1012))。

// Problem: E. Kamil and Making a Stream
// Contest: Codeforces - Codeforces Round #588 (Div. 2)
// URL: https://codeforces.com/contest/1230/problem/E
// Memory Limit: 768 MB
// Time Limit: 4000 ms
//
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<random>
#include<cassert>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].l+tr[u].r)>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
vector<int>v[N];
vector<pair<LL,LL>>all[N];
LL a[N],ans;
map<LL,int>mp;void del() {if(ans>=mod) ans-=mod;
}void dfs(int u,int f) {mp.clear();ans+=a[u]; del();for(auto y:all[f]) {ans+=y.Y*__gcd(y.X,a[u])%mod; ans%=mod;mp[__gcd(y.X,a[u])]+=y.Y;}mp[a[u]]++;for(auto x:mp) all[u].pb({x.X,x.Y});for(auto x:v[u]) {if(x==f) continue;dfs(x,u);}
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);cin>>n;for(int i=1;i<=n;i++) scanf("%lld",&a[i]);for(int i=1;i<=n-1;i++) {int a,b; scanf("%d%d",&a,&b);v[a].pb(b); v[b].pb(a);}dfs(1,0);printf("%lld\n",ans%mod);return 0;
}
/**/

Codeforces Round #588 (Div. 2) E. Kamil and Making a Stream 数学 + 暴力相关推荐

  1. Codeforces Round #588 (Div. 2) F. Konrad and Company Evaluation 图论 + 建反图 好题

    传送门 文章目录 题意: 思路: 题意: 给你一张nnn个点mmm条边的图,其中每个点iii初始编号为iii,边是有向的,方向为从编号大的指向编号小的.定义一个贡献为存在某三个点a,b,ca,b,ca ...

  2. Codeforces Round #588 (Div. 2) D. Marcin and Training Camp 思维

    传送门 文章目录 题意: 思路: 题意: 有nnn个人,每个人都有一个能力值bib_ibi​以及他会的技能aia_iai​,当他会第xxx个技能的时候,aia_iai​的第xxx位是111.定义当xx ...

  3. Codeforces Round #369 (Div. 2) B. Chris and Magic Square【数学,模拟】

    B. Chris and Magic Square time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  4. Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field 数学

    题目链接 题意:给你三个数n,m,k;让你构造出一个nm的矩阵,矩阵元素只有两个值(1,-1),且满足每行每列的乘积为k,问你多少个矩阵. 解法:首先,如果n,m奇偶不同,且k=-1时,必然无解: 设 ...

  5. Codeforces Round #315 (Div. 2C) 568A Primes or Palindromes? 素数打表+暴力

    题目:Click here 题意:π(n)表示不大于n的素数个数,rub(n)表示不大于n的回文数个数,求最大n,满足π(n) ≤ A·rub(n).A=p/q; 分析:由于这个题A是给定范围的,所以 ...

  6. Codeforces Round #657 (Div. 2) B. Dubious Cyrpto(思维,数学)

    题目链接 题意: m=n⋅a+b−c(n为任意正整数),给出m的值a,b,c的范围l,r(l<=a,b,c<=r),求出a,b,c. 思路: 由推倒知0<=|b-c|<=r-l ...

  7. Codeforces Round #670 (Div. 2) D. Three Sequences(差分序列、数学思维分析)

    D. Three Sequences D. Three Sequences 题意:给定一个长度为nnn的序列a[]a[]a[],要求把他分成两个序列b[],c[]b[],c[]b[],c[] a[i] ...

  8. Codeforces Round #568 (Div. 2)C2. Exam in BerSU (hard version)

    Codeforces Round #568 (Div. 2)C2. Exam in BerSU (hard version) 贪心+暴力 大致题意:N个人考试,每个人花费的时间是a[i],他们总共花费 ...

  9. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

最新文章

  1. 实现一个队列,使得push_rear(), pop_front() 和get_min()的时间复杂度为O(1)
  2. 比特现金网络升级之争:1个CPU=1票
  3. 嵌入式linux mono,嵌入式linux/android alsa_aplay alsa_amixer命令行用法(示例代码)
  4. mysql80重置密码_MySQL8.0修改密码问题
  5. NETCONF YANG语言文件语法格式
  6. 使用VS2012遇到的问题
  7. 《计算机网络》学习笔记 ·005【传输层】
  8. 王思聪吃热狗火了,程序员开发各种恶搞小程序!王校长:我不要脸的啊
  9. 解决:关于启动Kafka一段时间后,进程自己停止运行的问题
  10. 关于公众号文章搜索,有两个小技巧
  11. matlab匿名函数求导,MATLAB进行匿名函数求导出现错误
  12. CF633H Fibonacci-ish II(莫队+线段树)
  13. 神秘的java Https
  14. 查看linux系统是centos还是ubuntu的方法
  15. 面试官问“为什么应聘这个岗位”,应该如何回答?
  16. hdu 5148 树形dp,分组背包
  17. python中括号的作用_浅析python 中大括号中括号小括号的区分
  18. 微信小程序 柱状图的使用
  19. 每天进步一点点【图的深度优先搜索与广度优先搜索】
  20. python爬虫,爬起点小说网小说

热门文章

  1. python数字从大到小排列_Python练习题 005:三个数字由大到小排序输出
  2. 还在为孩子学不好数学而犯愁?你想要知道的或许在这!
  3. 明天放假,我放价!一个国庆假期教你学会数学建模
  4. python求斜边上的高_直角三角形斜边上的高怎么求
  5. python的网页解析器_python 之网页解析器
  6. mysql重装远程服务未_MySQL远程连接丢失问题解决方法(Lost connection to MySQL server)...
  7. c语言格式字符If,C语言所有语句格式 C语言中的的if语句共有多少种格式?
  8. linux sed 空间模式,整理:SED的模式空间与缓冲区及n,N,d,D,p,P,h,H,g,G,x解析...
  9. pandownload 卢本伟_PanDownload复活了!60MB/s!附下载地址
  10. android中的帧动画,[Android开发] Android中的帧动画