Pagini recente » Cod sursa (job #2013919) | Cod sursa (job #1687049) | Cod sursa (job #1836748) | Cod sursa (job #449439) | Cod sursa (job #758328)
Cod sursa(job #758328)
#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 coada[maxn] ;
int sel[maxn] ;
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
int maxim = -INF ;
for(int i=1;i<=n;++i)
{
scanf("%d",&v[i]);
if( v[i] > maxim )
maxim = 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 smax = maxim ;
int sum ;
for(int i=1;i<=n;++i)
{
int len = 1 ;
coada[1] = i ;
sel[i] = 1 ;
sum = v[i] ;
for(int j=1;j<=len;++j)
{
int nod_act = coada[j] ;
for(size_t k=0;k<vecini[nod_act].size();++k)
{
if( v[ vecini[nod_act][k] ] >= 0 && sel[ vecini[nod_act][k] ] == 0 )
{
++len ;
coada[len] = vecini[nod_act][k] ;
sel[ vecini[nod_act][k] ] = 1 ;
sum += v[ vecini[nod_act][k] ] ;
if( sum > smax )
smax = sum ;
}
}
}
memset(sel,0,sizeof(sel));
}
printf("%d\n",smax);
return 0;
}