E. Kamil and Making a Stream

参考:Codeforces Round #588 (Div. 2)-E. Kamil and Making a Stream-求树上同一直径上两两节点之间gcd的和

思路:求的就是1~n之间所有最短路的gcd之和。

用一个set来储存每一个结点可能的gcd,另外再用一个三维的map来记录每一个结点的每一个gcd出现的次数。

代码:

  1. // Created by CAD on 2019/9/28.
  2. #include <bits/stdc++.h>
  3. #define ll long long
  4. using namespace std;
  5. const int maxn=1e5+5;
  6. vector<int> g[maxn];
  7. map<ll,ll> cnt[maxn];
  8. set<ll> s[maxn];
  9. ll x[maxn];
  10. ll ans=0;
  11. const int mod=1e9+7;
  12. void dfs(int u,int f)
  13. {
  14. for(auto i:g[u])
  15. {
  16. if(i==f) continue;
  17. for(auto v:s[u])
  18. {
  19. ll temp=__gcd(1ll*v,x[i]);
  20. ans=(ans+1ll*temp%mod*cnt[u][v]%mod)%mod;
  21. cnt[i][temp]+=cnt[u][v];
  22. s[i].insert(temp);
  23. }
  24. s[i].insert(x[i]);
  25. ans=(ans+x[i]%mod)%mod;
  26. cnt[i][x[i]]++;
  27. dfs(i,u);
  28. }
  29. }
  30. int main()
  31. {
  32. ios::sync_with_stdio(false);
  33. cin.tie(0);
  34. int n;
  35. cin>>n;
  36. for(int i=1;i<=n;++i)
  37. cin>>x[i];
  38. for(int i=1,u,v;i<=n-1;++i)
  39. cin>>u>>v,g[u].push_back(v),g[v].push_back(u);
  40. ans=(ans+x[1])%mod;
  41. s[1].insert(x[1]);
  42. cnt[1][x[1]]=1;
  43. dfs(1,-1);
  44. cout<<ans<<endl;
  45. return 0;
  46. }

Kamil and Making a Stream的更多相关文章

  1. E. Kamil and Making a Stream 区间gcd

    E. Kamil and Making a Stream 这个题目要用到一个结论,就是区间一个区间长度为n的不同的gcd不会超过logn 个, 其实就是知道这个题目可以暴力就好了. 然后就是对于每一个 ...

  2. Codeforces Round #588 (Div. 2) E. Kamil and Making a Stream(DFS)

    链接: https://codeforces.com/contest/1230/problem/E 题意: Kamil likes streaming the competitive programm ...

  3. CF1230 E. Kamil and Making a Stream gcd+暴力

    比赛的时候TLE,第二天发现合并方向合并错了~ 改了一下顺序就切了~ 又掉分了,好难过QAQ...... Code: #include <bits/stdc++.h> #define N ...

  4. Codeforces 1229B. Kamil and Making a Stream

    传送门 注意到只要考虑祖先和后代之间的贡献 发现对于一个节点,他和所有祖先最多产生 $log$ 个不同的 $gcd$ 所以每个节点开一个 $vector$ 维护祖先到自己所有不同的 $gcd$ 和这个 ...

  5. 【CF1210C】Kamil and Making a Stream(vector,数论,树)

    题意:给定一棵n个点带点权的树,i号点的点定义f(i,j)为i到j路径上所有点的gcd,其中i是j的一个祖先,求所有f(i,j)之和mod1e9+7 2<=n<=1e5,0<=a[i ...

  6. CF1230E Kamil and Making a Stream

    题目大意是求 \(\sum_{v,fa,lca(v,fa)=fa}gcd(v \to fa)\) 容易发现 \(\gcd\) 只会变小,所以根据这玩意是从上到下的,每次暴力一下就可以了,\(\gcd\ ...

  7. Codeforces Round #588 (Div. 2)

    传送门 A. Dawid and Bags of Candies 乱搞. Code #include <bits/stdc++.h> #define MP make_pair #defin ...

  8. Codeforces Round #588 (Div. 1) 简要题解

    1. 1229A Marcin and Training Camp 大意: 给定$n$个对$(a_i,b_i)$, 要求选出一个集合, 使得不存在一个元素好于集合中其他所有元素. 若$a_i$的二进制 ...

  9. SQL Server-聚焦查询计划Stream Aggregate VS Hash Match Aggregate(二十)

    前言 之前系列中在查询计划中一直出现Stream Aggregate,当时也只是做了基本了解,对于查询计划中出现的操作,我们都需要去详细研究下,只有这样才能对查询计划执行的每一步操作都了如指掌,所以才 ...

随机推荐

  1. SharePoint 创建母版页

    一.前言 文章成体系,如果有不明白的地方请查看前面的文章. 二.目录 1.创建HTML页面 2.将HTML文件转换为SharePoint母版页 3.在 SPD中修改母版页“PlaceHolderMai ...

  2. js之数据类型(对象类型——构造器对象——数组1)

    数组是值的有序集合,每个值叫做一个元素,而每一个元素在数组中有一个位置,以数字表示,称为索引.JavaScript数组是无类型的,数组元素可以是任意类型且同一个数组中不同元素也可能有不同的类型.数组的 ...

  3. 【Git的基本操作七】创建远程库、在本地创建远程库别名

    1. 创建远程库

  4. apache备忘录

    apache多站点局域网访问: <VirtualHost *:80> DocumentRoot "E:/website/pxsj" ServerName host7.c ...

  5. OO方式实现ALV: cl_salv_table

    这里总结最近用cl_salv_table实现ALV遇到问题和解决办法 FORM set_alv2 . DATA: lv_syrepid TYPE syrepid. lv_syrepid = sy-cp ...

  6. 基于Openresty+Naxsi的WAF:从小白到实践

    序 2019年2月18日,加入妈妈网,至今已经有四个月的时间,上周进到一个网关项目组,这个项目的主要目的是基于openResty+Naxsi实现WAF,相关技术初定涉及到openResty.Lua.N ...

  7. JavaWeb【四、JSP基础语法】

    简介 JSP--Java Server Pages,根本是一个简化的Servlet设计,实现了在Java中使用HTML标签. 特点 跨平台,安全性好,大型站点开发,企业级Web应用,大数据. 对比: ...

  8. Phoenix设置联合主键

    1例如 create table test12(email varchar not null,id integer not null,name varchar not null,age integer ...

  9. ISO/IEC 15444-12 MP4 封装格式标准摘录 3

    目录 Track Data Layout Structures Data Information Box Data Reference Box Sample Size Boxes Compact Sa ...

  10. mysql数据库: 用户管理、pymysql使用、navicat插件使用

    一.用户管理 二.pymysql增删改查 三.sql注入攻击 一.用户管理 数据安全非常重要 不可能随便分配root账户 应该按照不同开发岗位分配不同的账户和权限 mysql中 将于用户相关的数据放在 ...