Pagini recente » Cod sursa (job #2052245) | Cod sursa (job #2784186) | Cod sursa (job #943446) | Cod sursa (job #2504987) | Cod sursa (job #1991268)
#include <cstdio>
#include <vector>
using namespace std;
int n, Sol = -1000000000, val[16002], d[16002];
vector <int> v[16002];
bool f[16002];
inline void dfs(int nod){
f[nod] = 1;
for(vector <int> :: iterator it = v[nod].begin() ; it != v[nod].end() ; ++it){
if(f[*it] == 1) continue ;
dfs(*it);
int aux = *it;
d[nod] = max(max(d[nod], d[nod] + d[*it]), d[*it] + val[nod]);
}
if(d[nod] > Sol) Sol = d[nod];
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n ; ++i)
scanf("%d", &val[i]), d[i] = val[i];
for(int i = 1; i < n ; ++i){
int x, y;
scanf("%d%d", &x, &y);
v[x].push_back(y);
v[y].push_back(x);
}
dfs(1);
printf("%d", Sol);
return 0;
}