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的更多相关文章
随机推荐
- 读书笔记---改善c#编程的157个建议
1.在拼接string时,如果牵涉到其他类型,先tostring一下会减少装箱操作:频繁操作字符串变量的话,使用stringbuilder效率较高. 2.tryParse相对于parse而言效率高,t ...
- PythonQt在windows下的编译
笔者最近在做Qt方面的开发工作,然后需要用到脚本程序对程序内部进行扩展,就很自然的想到了Python,度娘一下发现了一款神器,也就是今天给大家介绍的主角:PythonQt 今天首先给大家介绍下Pyth ...
- pip安装python模块方法
网上搜索了很多,主流的配置方法分为两种: 摘自 1.http://www.jb51.net/article/83617.htm 安装pip的包并确定pip安装时的镜像源地址,国内常用的地址有: htt ...
- org.apache.commons札记
StringUtils.isBlank(null); //trueStringUtils.isBlank(""); //trueStringUtils.isBlank(" ...
- struts spring 整合
错误 :Unable to load jar:file:WEB-INF/lib/struts2-spring-plugin-2.3.15.1.jar!/struts-default.xml 原因: 我 ...
- 2018.10.02 NOIP模拟 序列维护(线段树+广义欧拉定理)
传送门 一道比较好的线段树. 考试时线性筛打错了于是弃疗. 60分暴力中有20分的快速幂乘爆了于是最后40分滚粗. 正解并不难想. 每次区间加打懒标记就行了. 区间查询要用到广义欧拉定理. 我们会发现 ...
- java多线程同步(转)
原文地址:http://developer.51cto.com/art/201509/490965.htm 一.场景 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时, ...
- java获取变量的类型
对于简单类型变量,是无法直接获得变量类型的://要想获取,必须自定义函数进行返回 对于包装类型变量,是可以直接获得的,变量名称.getClass().getName(); java中获取变量的类型可以 ...
- python编码(六)
1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有 ...
- PrefixHeader.pch 在工程中的使用
1) 新建一个pch文件 2) 在 工程 Build Settings 中搜索 header 将Precompile Prefix Header 置为YES 2) 选中pch文件, 将右侧相对路径 ...