Pagini recente » Cod sursa (job #400982) | Cod sursa (job #2939479) | Cod sursa (job #2626286) | Cod sursa (job #2427007) | Cod sursa (job #1493457)
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#define INF ( (1 << 30) - 1 + (1 << 30) )
#define mod 666013
using namespace std;
int n, i, x, y, mx, f[16005], a[16005], dp[16005];
vector <int> v[16005];
void DFS(int nod)
{
f[nod] = 1;
dp[nod] = a[nod];
vector <int> :: iterator it;
for(it = v[nod].begin(); it != v[nod].end(); it++)
{
int nxt = *it;
if(f[nxt])
continue;
DFS(nxt);
dp[nod] = max(dp[nod], dp[nod] + dp[nxt]);
}
if(dp[nod] > mx)
mx = dp[nod];
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
scanf("%d", &n);
for(i = 1; i <= n; i++)
scanf("%d", &a[i]);
for(i = 1; i < n; i++)
{
scanf("%d%d", &x, &y);
v[x].push_back(y);
v[y].push_back(x);
}
mx = -INF;
DFS(1);
printf("%d", mx);
return 0;
}