我們考慮將一個節點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的更多相关文章

随机推荐

  1. linux-radhat-gitlab服务搭建

    1.安装gitlab的依赖项 sudo yum install -y curl policycoreutils-python openssh-server cronie 2.设置防火墙 sudo lo ...

  2. 部署maven的一些要点、遇到的问题

    一. maven环境的搭建 . 下载并配置maven(可做可不做) ()到http://maven.apache.org下载maven的最新版本,并解压到某一目录(假设是d:\develop\apac ...

  3. lib文件反汇编

    运行vc命令行,输入:dumpbin /disasm xxx.lib > test.txt lib就是obj文件打包起来的,可以用lib.exe解出来,下面是vc环境下的操作,其他环境,看命令行 ...

  4. Java数据结构和算法(四)赫夫曼树

    Java数据结构和算法(四)赫夫曼树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 赫夫曼树又称为最优二叉树,赫夫曼树的一个 ...

  5. 重新学习pytorch的库函数等..

    http://blog.csdn.net/victoriaw/article/list/10 开始第一篇: http://blog.csdn.net/VictoriaW/article/details ...

  6. 给自己名字abel.这个好,怎么字母排序都第一

    给自己名字abel.这个好,怎么字母排序都第一

  7. css心得体会

    非块级元素  要使得其有长宽的效果  可以设置  margin  和  padding 块级元素     可以直接设置  width  和  height div标签   要使得你内部元素居中   可 ...

  8. KbmMW 服务器架构简介

    kbmmw 由于文档比较少,很多同学开始用时很难理解.一直准备写一个关于kbmmw 架构的东西. 这几天与红鱼儿(blog)研究服务器线程时,整理了一下,大概画了一下kbmmw (版本4.5)服务器的 ...

  9. 在用easyui中做CRUD功能时,当删除一行或多行数据后再点击修改会提示你选中了多行,如何解决这个bug了?

    在用easyui中做CRUD功能时,当删除一行或多行数据后再点击修改会提示你选中了多行,如何解决这个bug了? 在删除成功后,加上这句话就可以了:$("#dg").datagrid ...

  10. jquery报.live() is not a function的解决方法

    jquery报.live() is not a function的解决方法: jquery中的live()方法在jquery1.9及以上的版本中已被废弃了,如果使用,会抛出TypeError: $(. ...