zoukankan      html  css  js  c++  java
  • Codeforces Round #588 (Div. 2)E(DFS,思维,__gcd,树)

    #define HAVE_STRUCT_TIMESPEC
    #include<bits/stdc++.h>
    using namespace std;
    long long a[100007];
    vector<int>edge[100007];
    map<long long,long long>mp[100007];//key记录gcd的大小,value记录gcd出现的次数
    long long ans;
    const long long mod= 1e9+7;
    void dfs(int u,int fa){
    ++mp[u][a[u]];
    ans+=a[u];//自己和自己组成的点对gcd就是自己
    for(auto it:mp[fa]){//遍历向上的路径
    long long tmp=__gcd(it.first,a[u]);//求路径上点对的gcd和u的gcd
    ans=(ans+tmp*it.second)%mod;//更新答案,加上gcd和这个gcd一共在以u为起点的向上的路径中出现过几次的乘积
    mp[u][tmp]+=it.second;//更新这个gcd的次数,如果还有向下的结点,轮到它遍历时上面的gcd次数将会继承
    }
    for(auto it:edge[u])//dfs
    if(it!=fa)
    dfs(it,u);
    }
    int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int n;
    cin>>n;
    for(int i=1;i<=n;++i)
    cin>>a[i];
    int u,v;
    for(int i=1;i<n;++i){
    cin>>u>>v;
    edge[u].push_back(v);
    edge[v].push_back(u);
    }
    dfs(1,0);
    cout<<ans;
    return 0;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    async await promise写法
    nginx自动启动脚本
    nginx源码编译安装
    PHP源码编译安装
    MySQL修改root密码的多种方法
    PKG_CONFIG_PATH变量 与 ld.so.conf 文件
    confluence5.65+CentOS+mysql安装破解
    nigos core 安装配置
    cacti+CentOS6.5
    Linux+mysql+apache+php
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11587564.html
Copyright © 2011-2022 走看看