2018.12.22【NOIP提高组】模拟B组 JZOJ 3519 灵能矩阵

D e s c r i p t i o n Description Description

给定一棵树,规定每个点的权值为其所有叶子节点的权值和,现在只能减少叶子节点的权值,问使所有节点的子节点权值都相同的最少总减少值

数据范围:
对于15%的数据, 1 ≤ n ≤ 10 1\leq n\leq 10 1n10
对于30%的数据,对于边 S i , T i , S i + 1 ≠ T i S_i, T_i,S_i + 1\neq Ti Si,TiSi+1=Ti 的边数不超过3 条。
对于50%的数据, 1 ≤ n ≤ 1000 1\leq n \leq 1000 1n1000
对于100%的数据, 1 ≤ n ≤ 100000 , 1 < = A i < = 2 30 1 \leq n \leq 100000,1 <= A_i <= 2^{30} 1n1000001<=Ai<=230


S o l u t i o n Solution Solution

5%贪心
30%搜索
100%树形 d p dp dp
可以发现每次修改结束的值必然是子节点们的 l c m lcm lcm


代码
#include<cstdio>
#include<cctype>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;typedef long long LL;
int n;
vector<int>e[1000011];
LL lim[1000011],ans,a[1000011];
inline LL gcd(LL x,LL y){return y?gcd(y,x%y):x;}
inline LL lcm(LL x,LL y){return x<y?x*y/gcd(y,x):x*y/gcd(x,y);}
inline char Getchar()
{
    static char buf[100000],*p1=buf+100000,*pend=buf+100000;
    if(p1==pend)
	{
        p1=buf; pend=buf+fread(buf,1,100000,stdin);
        if (pend==p1) return -1;
    }
    return *p1++;
}
inline LL read()
{
	char c;int d=1;LL f=0;
	while(c=Getchar(),!isdigit(c))if(c==45)d=-1;f=(f<<3)+(f<<1)+c-48;
	while(c=Getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;
	return d*f;
}
inline void write(register LL x)
{
	if(x<0)write(45),x=-x;
	if(x>9)write(x/10);
	putchar(x%10+48);
	return;
}
inline void dfs(register int x)
{
	lim[x]=1;
	if(a[x])return;
	int len=e[x].size();
	LL sum=0,minn=1e18;
	for(register int i=0;i<len;i++)
	{
		int y=e[x][i];
		dfs(y);
		lim[x]=lcm(lim[x],lim[y]);
		minn=min(minn,a[y]);
		sum+=a[y];
	}
	lim[x]*=len;
	a[x]=minn*len-minn*len%lim[x];
	ans+=sum-a[x];
	return;
}
signed main()
{
	freopen("pylon.in","r",stdin);
	freopen("pylon.out","w",stdout);
	n=read();
	for(register int i=1;i<=n;i++) a[i]=read();
	for(register int i=1,x,y;i<n;i++)
	{
		x=read();y=read();
		e[x].push_back(y);
	}
	dfs(1);
	write(ans);
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值