比赛 |
20160323 |
评测结果 |
AAAAAAAAAA |
题目名称 |
修剪花卉 |
最终得分 |
100 |
用户昵称 |
ZXCVBNM_1 |
运行时间 |
0.021 s |
代码语言 |
C++ |
内存使用 |
0.86 MiB |
提交时间 |
2016-03-23 21:05:55 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define MAXN 16010
#define INF 2147483647
struct node
{
int begin,end,next;
}edge[MAXN*2];
int cnt,Head[MAXN],f[MAXN],w[MAXN];
void addedge(int bb,int ee)
{
edge[++cnt].begin=bb;edge[cnt].end=ee;edge[cnt].next=Head[bb];Head[bb]=cnt;
}
void addedge1(int bb,int ee)
{
addedge(bb,ee);addedge(ee,bb);
}
void Tdp(int u,int fa)
{
int i,v;
f[u]=w[u];
for(i=Head[u];i!=-1;i=edge[i].next)
{
v=edge[i].end;
if(v==fa)continue;
Tdp(v,u);
if(f[v]>0)f[u]+=f[v];
}
}
int main()
{
freopen("makeup.in","r",stdin);
freopen("makeup.out","w",stdout);
int n,i,bb,ee,MAX;
scanf("%d",&n);
memset(f,0,sizeof(f));
for(i=1;i<=n;i++)scanf("%d",&w[i]),f[i]=INF;
memset(Head,-1,sizeof(Head));cnt=1;
for(i=1;i<n;i++)
{
scanf("%d %d",&bb,&ee);addedge1(bb,ee);
}
Tdp(1,0);
MAX=-1;
for(i=1;i<=n;i++)MAX=max(MAX,f[i]);
printf("%d",MAX);
fclose(stdin);
fclose(stdout);
return 0;
}