Pagini recente » Cod sursa (job #2031167) | Cod sursa (job #186534) | Cod sursa (job #2695042) | Cod sursa (job #2938901) | Cod sursa (job #362172)
Cod sursa(job #362172)
#include <cstdio>
#include <vector>
using namespace std;
#define FIN "asmax.in"
#define FOUT "asmax.out"
#define N 16001
#define INF 1000000000
int n, v[N], s[N], a[N];
vector <int> m[N];
int max(int a, int b)
{
return a > b ? a : b;
}
void DFS(int x)
{
int i;
s[x] = v[x];
a[x] = 1;
for (i = 0; i < m[x].size(); ++ i)
if (!a[m[x][i]])
{
DFS(m[x][i]);
if (s[m[x][i]] > 0)
s[x] += s[m[x][i]];
}
}
int main()
{
int i, x, y, smax;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d", &n);
for (i = 1; i <= n; ++ i)
scanf("%d", &v[i]);
for (i = 1; i < n; ++ i)
{
scanf("%d%d", &x, &y);
m[x].push_back(y);
m[y].push_back(x);
}
DFS(1);
for (i = 1, smax = - INF; i <= n; ++ i)
smax = max(smax, s[i]);
printf("%d\n", smax);
}