Pagini recente » Cod sursa (job #2121602) | Cod sursa (job #3232799) | Cod sursa (job #89594) | Cod sursa (job #2990075) | Cod sursa (job #2749452)
#include <fstream>
#include <vector>
#include <deque>
#include <stack>
#include <algorithm>
#include <limits.h>
using namespace std;
ifstream cin("asmax.in") ;
ofstream cout("asmax.out") ;
int n ;
vector<int> v[16009] ;
long long sums[100009], val[100009], verif[100009] ;
long long recur(int x)
{
long long sum = 0 ;
if(sums[x] != INT_MIN)return sums[x] ;
verif[x] = 1 ;
for(int f = 0 ; f < v[x].size() ; f ++)
{
int curent = v[x][f] ;
if(sums[curent] == INT_MIN && !verif[curent])sums[curent] = recur(curent) ;
if(sums[curent] > 0)sum += sums[curent] ;
}
return sum + val[x] ;
}
int main()
{
cin >> n ;
for(int f = 1 ; f <= n ; f ++)
cin >> val[f], sums[f] = INT_MIN ;
for(int a, b, f = 1 ; f < n ; f ++)
cin >> a >> b, v[a].push_back(b), v[b].push_back(a) ;
long long mx = recur(1) ;
for(int f = 1 ; f <= n ; f ++)
mx = max(mx, sums[f]) ;
cout << mx ;
return 0;
}