比赛 20160323 评测结果 AAAAAAAAAA
题目名称 修剪花卉 最终得分 100
用户昵称 lxtgogogo 运行时间 0.013 s
代码语言 C++ 内存使用 0.80 MiB
提交时间 2016-03-23 20:43:14
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iomanip>
#include<ctime>
#include<queue>
#include<cmath>
using namespace std;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(ch>'9' || ch<'0')	{if(ch=='-'){f=-1;}ch=getchar();}
	while(ch>='0' && ch<='9')	{x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
	return x*f;
}
const int r=16010;
int n=0;
int v[r]={};
long long dp[r]={};
long long ans=-1000000000000000000LL;

struct hehe{
	int y,next;
}e[r*2];
int linkk[r]={},len=0;

void insert(int a,int b){
	e[++len].next=linkk[a];
	linkk[a]=len;
	e[len].y=b;
}
void init(){
	n=read();
	for(int i=1;i<=n;i++)	v[i]=read();
	for(int i=1;i<n;i++)
	{
		int x=read(),y=read();
		insert(x,y);
		insert(y,x);
	}
}
void work(int k,int fa){
	for(int i=linkk[k];i;i=e[i].next)
		if(e[i].y!=fa)
		{
			work(e[i].y,k);
			if(dp[e[i].y]>0)
				dp[k]+=dp[e[i].y];
		}
	dp[k]+=v[k];
	if(dp[k]>ans)	ans=dp[k];
}
int main(){
	freopen("makeup.in","r",stdin);
	freopen("makeup.out","w",stdout);
	
	init();
	work(1,0);
	cout<<ans<<endl;
	
	fclose(stdin);fclose(stdout);
	return 0;
}