记录编号 241054 评测结果 AAAAAAAAAA
题目名称 修剪花卉 最终得分 100
用户昵称 Gravatar咸鱼二号 是否通过 通过
代码语言 C++ 运行时间 0.014 s
提交时间 2016-03-24 12:37:35 内存使用 0.86 MiB
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cmath>
#include<utility>
#include<stdio.h>
#include<cstdlib>
#include<iomanip>	//cout<<setiosflags(ios::fixed)<<setprecision(2);
#include<ctime> //double a=(double)clock();	cout<<a<<endl;
#include<vector>
#include<queue>
using namespace std;
const int maxn=16010;
inline long long read()
{
	long long x=0;int ff=1;char ch=getchar();
	while(ch>'9'||ch<'0'){if(ch=='-')ff=-1; ch=getchar();}
	while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=getchar();}
	return ff*x;
}
inline long long mymax(long long A,long long B)
{if(A>B)return A;return B;}
int N,t1,t2;
long long f[maxn],num[maxn],ans;
int lin[maxn],len=0;
struct edge
{
	int y,next;
}e[maxn*2];
inline void insert(int xx,int yy)
{
	e[++len].next=lin[xx];
	lin[xx]=len;
	e[len].y=yy;
}
long long dfs(int x,int fa)
{
	if(f[x]!=-1)
		return f[x];
	f[x]=0;
	for(int i=lin[x];i;i=e[i].next)
		if(e[i].y!=fa)
			f[x]+=dfs(e[i].y,x);
	f[x]+=num[x];
	if(f[x]<0)
		f[x]=0;
	return f[x];
}
int main()
{
	freopen("makeup.in","r",stdin);
	freopen("makeup.out","w",stdout);
	N=read();
	for(int i=1;i<=N;i++)
		num[i]=read();
	for(int i=1;i<N;i++)
	{
		t1=read(),t2=read();
		insert(t1,t2);insert(t2,t1);
	}
	memset(f,-1,sizeof(f));
	dfs(1,0);
	ans=0;
	for(int i=1;i<=N;i++)
		ans=mymax(ans,f[i]);
	cout<<ans<<endl;
	return 0;
}