Kamil and Making a Stream
参考:Codeforces Round #588 (Div. 2)-E. Kamil and Making a Stream-求树上同一直径上两两节点之间gcd的和
思路:求的就是
1~n之间所有最短路的gcd之和。用一个
set来储存每一个结点可能的gcd,另外再用一个三维的map来记录每一个结点的每一个gcd出现的次数。
代码:
// Created by CAD on 2019/9/28.
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+5;
vector<int> g[maxn];
map<ll,ll> cnt[maxn];
set<ll> s[maxn];
ll x[maxn];
ll ans=0;
const int mod=1e9+7;
void dfs(int u,int f)
{
    for(auto i:g[u])
    {
        if(i==f) continue;
        for(auto v:s[u])
        {
            ll temp=__gcd(1ll*v,x[i]);
            ans=(ans+1ll*temp%mod*cnt[u][v]%mod)%mod;
            cnt[i][temp]+=cnt[u][v];
            s[i].insert(temp);
        }
        s[i].insert(x[i]);
        ans=(ans+x[i]%mod)%mod;
        cnt[i][x[i]]++;
        dfs(i,u);
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin>>n;
    for(int i=1;i<=n;++i)
        cin>>x[i];
    for(int i=1,u,v;i<=n-1;++i)
        cin>>u>>v,g[u].push_back(v),g[v].push_back(u);
    ans=(ans+x[1])%mod;
    s[1].insert(x[1]);
    cnt[1][x[1]]=1;
    dfs(1,-1);
    cout<<ans<<endl;
    return 0;
}
Kamil and Making a Stream的更多相关文章
- E. Kamil and Making a Stream  区间gcd
		E. Kamil and Making a Stream 这个题目要用到一个结论,就是区间一个区间长度为n的不同的gcd不会超过logn 个, 其实就是知道这个题目可以暴力就好了. 然后就是对于每一个 ... 
- 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 ... 
- CF1230 E. Kamil and Making a Stream gcd+暴力
		比赛的时候TLE,第二天发现合并方向合并错了~ 改了一下顺序就切了~ 又掉分了,好难过QAQ...... Code: #include <bits/stdc++.h> #define N ... 
- Codeforces 1229B. Kamil and Making a Stream
		传送门 注意到只要考虑祖先和后代之间的贡献 发现对于一个节点,他和所有祖先最多产生 $log$ 个不同的 $gcd$ 所以每个节点开一个 $vector$ 维护祖先到自己所有不同的 $gcd$ 和这个 ... 
- 【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 ... 
- CF1230E Kamil and Making a Stream
		题目大意是求 \(\sum_{v,fa,lca(v,fa)=fa}gcd(v \to fa)\) 容易发现 \(\gcd\) 只会变小,所以根据这玩意是从上到下的,每次暴力一下就可以了,\(\gcd\ ... 
- Codeforces Round #588 (Div. 2)
		传送门 A. Dawid and Bags of Candies 乱搞. Code #include <bits/stdc++.h> #define MP make_pair #defin ... 
- Codeforces Round #588 (Div. 1) 简要题解
		1. 1229A Marcin and Training Camp 大意: 给定$n$个对$(a_i,b_i)$, 要求选出一个集合, 使得不存在一个元素好于集合中其他所有元素. 若$a_i$的二进制 ... 
- SQL Server-聚焦查询计划Stream Aggregate VS Hash Match Aggregate(二十)
		前言 之前系列中在查询计划中一直出现Stream Aggregate,当时也只是做了基本了解,对于查询计划中出现的操作,我们都需要去详细研究下,只有这样才能对查询计划执行的每一步操作都了如指掌,所以才 ... 
随机推荐
- 使用filebeat给多个logstash传输数据
			1. filebeat.yml filebeat.inputs: - type: log enabled: true paths: - /var/log/messages - /var/log/dme ... 
- 作业5:Java编译原理
			零.编译 1.编译器 (1)前端编译器:.java文件转变为.class文件Sun的javacEclipse JDT中的增量编译器(ECJ) (2)后端编译器:.class文件转变为机器码HotSpo ... 
- LeetCode:175.组合两个表
			题目链接:https://leetcode-cn.com/problems/combine-two-tables/ 题目 表1: Person +-------------+---------+ | ... 
- mysql双yes但是同步延时问题
			今天发现在153服务器insert一条数据,然后查看从库154和162都没有这条数据,但是在154和162执行show slave status 显示的双yes 后来重启了153 154 162 ... 
- JQuery 判断复选框是否选中
			$("input").attr("checked") == "checked" or "undefined" $(&qu ... 
- 4.ID主键生成策略
			保证唯一性(auto_increment) 一.xml方式 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping P ... 
- 【1】Zookeeper概述
			一.前言 在"网络是不可靠的"这一前提下,分布式系统开发需要解决如下四个问题: 客户端如何访问众多服务? 解决方案:服务聚合,使用API网关 服务于服务之间如何通信? 解决方案 ... 
- 蓝牙App漏洞系列分析之一CVE-2017-0601
			蓝牙App漏洞系列分析之一CVE-2017-0601 0x01 概要 2017年5月的 Android 安全公告修复了我们提交的一个蓝牙提权中危漏洞,这个漏洞尽管简单,但比较有意思,能够使本地恶意 A ... 
- 8.3.ZooKeeper集群安装配置
			1.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式. 单机模式:Zookeeper只运行在一台服务器上,适合测试环境: 伪集群模式:就是在一台物理机上 ... 
- Java#Spring框架下注解解析
			@Bean 定义Bean @Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里.添加的bean的id为方法名 @Configura ... 
