jzoj3519
我們考慮將一個節點x的所有兒子的數都改成y
記lcm[x]表示一個點的所有子節點的lcm值
那麼我們會發現y*deg[x] 要被lcm[x]整除
那麼x就會比x所有子節點最小的數小,記為z
那麼x就是比z小的數中,可以整除lcm[x]/deg[x]的最大的數
會不會導致x不能整除它對應的lcm?不會
因為lcm[x]/deg[x]就是它所有子節點的lcm,可以整除x的所有子節點
#include<bits/stdc++.h>
using namespace std;
long long lcs[100010],ans,a[100010],vis[100010],n;
long long lcm(long long a,long long b){return a*b/__gcd(a,b);}
vector<int>v[100010];
void dfs(int x){
vis[x]=1;
if(a[x]!=0){
lcs[x]=1;
return;
}
long long sc=0,minn=1e15,sum=0;
lcs[x]=1;
for(int i=0;i<(int)v[x].size();i++)
if(vis[v[x][i]]==0){
dfs(v[x][i]);
sum+=a[v[x][i]];
sc++;
minn=min(minn,a[v[x][i]]);
lcs[x]=lcm(lcs[x],lcs[v[x][i]]);
}
lcs[x]*=sc;
long long m=minn-(minn%(lcs[x]/sc));
ans+=sum-m*sc;
a[x]=m*sc;
}
int main(){
freopen("pylon.in","r",stdin);
freopen("pylon.out","w",stdout);
scanf("%lld",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=1;i<n;i++){
int x,y;
scanf("%d %d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}
dfs(1);
printf("%lld",ans);
}
jzoj3519的更多相关文章
随机推荐
- Flask源码剖析详解
1. 前言 本文将基于flask 0.1版本(git checkout 8605cc3)来分析flask的实现,试图理清flask中的一些概念,加深读者对flask的理解,提高对flask的认识.从而 ...
- 201621123008 《Java程序设计》第四周学习总结
1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 关键字:继承,多态. 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般不需要出现过多的字. 2. 书面作业 1. ...
- 连接数据库-stone
# -*- coding:utf-8 -*- import pymysql class mysql: def __init__(self, host, port, dbuser, dbpwd, dbn ...
- 什么是@guid
我将给大家讲解史上最通俗一同guid与ID的区别...
- ubuntu系统中安装RoboMongo
1.下载RoboMongo RoboMongo官网下载链接.选择好相应版本. 2.解压文件 tar -xzf robomongo--linux-x86_64-.tar.gzcd robomongo-0 ...
- 2018.10.20 NOIP模拟 巧克力(trie树+dfs序+树状数组)
传送门 好题啊. 考虑前面的32分,直接维护后缀trietrietrie树就行了. 如果#号不在字符串首? 只需要维护第一个#前面的字符串和最后一个#后面的字符串. 分开用两棵trie树并且维护第一棵 ...
- 2018.06.29 NOIP模拟 区间(前缀和差量)
区间(interval.cpp) 时限:2000ms 空间限制:512MB [问题描述] 给出一个长度为 n 的序列 a[1]-a[n]. 给出 q 组询问,每组询问形如<x,y>< ...
- 2018.09.09 UVa10529 - Dumb Bones(期望dp)
传送门 期望dp好题. f[i]表示摆放i个的最小花费,于是f[i]可以从f[j]与f[i-j+1]转移过来了. 代码: #include<bits/stdc++.h> #define N ...
- 2018.08.16 洛谷P2029 跳舞(线性dp)
传送门 简单的线性dp" role="presentation" style="position: relative;">dpdp. 直接推一推 ...
- asp.net 中长尾链接实现推送 -- comet
一般需求推送服务时,都会去第三方拿推送组件,如”极光“,”百度“,”小米"什么的,自己用.net实现推送服务端需要面对很多问题,比如C10K,但是企业内部使用往往用不了10K的链接,有个1K ...