Pagini recente » Cod sursa (job #927465) | Cod sursa (job #3001195) | Cod sursa (job #375283) | Cod sursa (job #1829055) | Cod sursa (job #410667)
Cod sursa(job #410667)
#include<stdio.h>
#include<vector>
using namespace std;
#define Nmax 16005
#define inf 0x3f3f3f3f
vector<int> l[Nmax];
int N,d[Nmax],p[Nmax];
int v[Nmax];
void DF(int k)
{
v[k]=1;
int Sum=0;
for(int i=0;i<(int)l[k].size();++i)
if (!v[l[k][i]])
{
DF(l[k][i]);
if (p[ l[k][i] ] > 0)
Sum += p[ l[k][i] ];
}
p[k] = Sum + d[k];
}
void solve()
{
DF(1);
int Sol=-inf;
for(int i=1;i<=N;++i)
if (Sol < p[i])
Sol = p[i];
printf("%d\n",Sol);
}
void cit();
int main()
{
cit();
solve();
return 0;
}
void cit()
{
int a,b;
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&N);
for(int i=1;i<=N;++i)
scanf("%d",&d[i]);
for(int i=1;i<N;++i)
{
scanf("%d%d",&a,&b);
l[a].push_back(b);
l[b].push_back(a);
}
}