Pagini recente » Cod sursa (job #2172467) | Cod sursa (job #1743806) | Cod sursa (job #1328689) | Cod sursa (job #146038) | Cod sursa (job #912794)
Cod sursa(job #912794)
#include<cstdio>
#include<vector>
#define In "asmax.in"
#define Out "asmax.out"
#define N 16004
#define oo 2000
using namespace std;
vector< int > v[N],c,sum;
int n,poz,sol;
void Citire()
{
int i,x,y;
freopen(In,"r",stdin);
freopen(Out,"w",stdout);
scanf("%d",&n);
c.resize(n+1);sum.resize(n+1);
for(i=1;i<=n;i++)
scanf("%d",&c[i]);
for(i=1;i<n;i++)
{
scanf("%d %d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}
}
void Dfs(int nod)
{
sum[nod] = c[nod];
int i,lim,vec;
lim = v[nod].size();
for(i=0;i<lim;i++)
{
vec = v[nod][i];
if(sum[vec]==-oo)
{
Dfs(vec);
if(sum[nod]+sum[vec] > sum[nod])
sum [nod] += sum[vec];
}
}
if(sum[nod]>sol)
sol = sum[nod];
}
void Init()
{
int i;
for(i=1;i<=n;i++)
sum[i] = -oo;
sol = -oo;
}
int main()
{
Citire();
Init();
Dfs(1);
printf("%d\n",sol);
return 0;
}