记录编号 317128 评测结果 AAAAAAAAAA
题目名称 [HZOI 2016] 简单的最近公共祖先 最终得分 100
用户昵称 GravatarNewBee 是否通过 通过
代码语言 C++ 运行时间 2.730 s
提交时间 2016-10-07 18:02:55 内存使用 30.81 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#define Cu fclose(stdin);fclose(stdout);return 0;
#define Begin freopen("easy_LCA.in","r",stdin);freopen("easy_LCA.out","w",stdout);chul();Cu;
using namespace std;
const int maxn=1000010;
int w[maxn],head[maxn],size[maxn],tim;
long long ans=0;
typedef long long ll;
int fath[maxn];
struct op{
	int to,next;
}r[maxn<<1];
void insert(int fr,int to){
	tim++;
	r[tim].to=to;
	r[tim].next=head[fr];
	head[fr]=tim;
}
void dfs(int rt){
	size[rt]=1;
	int x=0,y;
	for(int i=head[rt];i;i=r[i].next){
		y=r[i].to;
		if(fath[rt]==y)continue;
		fath[y]=rt;
		dfs(y);
		ans+=(ll)size[rt]*size[y]*w[rt];
		size[rt]+=size[y];
	}
}
void chul(){
	int n,s,t;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&w[i]);
		ans+=w[i];
	}
	for(int i=1;i<n;i++){
		scanf("%d%d",&s,&t);
		insert(s,t);
		insert(t,s);
	}
	dfs(1);
	printf("%lld\n",ans);
}
int main(){
	Begin;
}