Kamil and Making a Stream

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出现的次数。

代码:

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

原文地址:https://www.cnblogs.com/CADCADCAD/p/11610403.html

时间: 2024-07-29 20:53:01

Kamil and Making a Stream的相关文章

E. Kamil and Making a Stream 区间gcd

E. Kamil and Making a Stream 这个题目要用到一个结论,就是区间一个区间长度为n的不同的gcd不会超过logn 个, 其实就是知道这个题目可以暴力就好了. 然后就是对于每一个节点,我都存从祖先到这个节点的所有的gcd,用一个vector存下来. 然后因为这个vector的size 不会很大,所以就可以直接暴力往下转移. #include <cstdio> #include <cstring> #include <cstdlib> #includ

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

链接: https://codeforces.com/contest/1230/problem/E 题意: Kamil likes streaming the competitive programming videos. His MeTube channel has recently reached 100 million subscribers. In order to celebrate this, he posted a video with an interesting problem

爱你不容易 —— Stream详解

作为前端,我们常常会和 Stream 有着频繁的接触.比如使用 gulp 对项目进行构建的时候,我们会使用 gulp.src 接口将匹配到的文件转为 stream(流)的形式,再通过 .pipe() 接口对其进行链式加工处理: 或者比如我们通过 http 模块创建一个 HTTP 服务: const http = require('http'); http.createServer( (req, res) => { //... }).listen(3000); 此处的 req 和 res 也属于

XML Stream

package com.example.wangjiaxin20160516; import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.io.InputStreamReader;im

leetcode笔记:Find Median from Data Stream

一. 题目描述 Median is the middle value in an ordered integer list. If the size of the list is even, there is no middle value. So the median is the mean of the two middle value. Examples: [2,3,4] , the median is 3 [2,3], the median is (2 + 3) / 2 = 2.5 De

【转】Scala 中的 Stream

///////////////////////////////////// def numsFrom(n: Int): Stream[Int] = n #:: numsFrom(n + 1) def testStream = { val tenOrMore = numsFrom(10) println(tenOrMore) println(tenOrMore.tail) println(tenOrMore.tail.tail) println(tenOrMore.tail.tail.tail)

Android4.4.4 GZIPOutputStream报错:Stream error

在android 4.4.4 机器上使用网友提供的GZipUtils方法进行GZip压缩,但是会一直报错Stream error.错误位置: public static void compress(InputStream is, OutputStream os) throws Exception { GZIPOutputStream gos = new GZIPOutputStream(os); int count; byte data[] = new byte[BUFFER]; while (

Java学习记录(补充八:Date类;Java流(Stream),文件(File)和IO)

Date类,Calendar类package Box1; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Random; //Date类 public class DateTest { public static void main(String[] args) { Date

Java 8 : Stream API 练习

//店铺属性类 public class Property { String name; // 距离,单位:米 Integer distance; // 销量,月售 Integer sales; // 价格,这里简单起见就写一个级别代表价格段 Integer priceLevel; public Property(String name, int distance, int sales, int priceLevel) { this.name = name; this.distance = di