Pagini recente » Cod sursa (job #3133631) | Cod sursa (job #2532003) | Cod sursa (job #2265598) | Cod sursa (job #581247) | Cod sursa (job #758339)
Cod sursa(job #758339)
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
#define maxn 16001
#define INF 2000000000
int n;
int v[maxn];
vector <int> vecini[maxn] ;
int smax = - INF ;
int sel[maxn] ;
int df(int nod)
{
int sum = v[nod];
sel[nod] = 1 ;
for(size_t i=0;i<vecini[nod].size();++i)
if( sel[ vecini[nod][i] ] == 0 )
sum += df ( vecini[nod][i] ) ;
if(sum > smax )
smax = sum;
if( sum < 0 )
sum = 0;
return sum ;
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
smax = -INF ;
for(int i=1;i<=n;++i)
{
scanf("%d",&v[i]);
if( v[i] > smax )
smax = v[i] ;
}
for(int i=1;i<n;++i)
{
int a,b;
scanf("%d%d",&a,&b);
vecini[a].push_back(b);
vecini[b].push_back(a);
}
int x = df(1) ;
printf("%d\n", smax);
return 0;
}