Pagini recente » Cod sursa (job #2529950) | Cod sursa (job #1173541) | Cod sursa (job #1446111) | Cod sursa (job #1229275) | Cod sursa (job #1592826)
#include <cstdio>
#include <iostream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <functional>
#include <string>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <bitset>
#include <stack>
#include <iomanip>
#define MOD 1000000000
#define NMAX 16005
#define INF (1<<30)
using namespace std;
FILE *fin = freopen("asmax.in", "r", stdin);
FILE *fout = freopen("asmax.out", "w", stdout);
typedef pair<int, int> pii;
int val[NMAX], smax[NMAX];
bool viz[NMAX];
vector<int> v[NMAX];
int DFS(int x);
int main() {
int n, d, i, x, y;
cin >> n;
for (i = 1; i <= n; ++i)
cin >> val[i];
for (i = 0; i < n - 1; ++i) {
cin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
DFS(1);
int nr = -INF;
for (i = 1; i <= n; ++i)
nr = max(nr, smax[i]);
cout << nr;
return 0;
}
int DFS(int x) {
int i, y, sum = val[x], rez;
viz[x] = true;
for (i = 0; i < v[x].size(); ++i) {
y = v[x][i];
if (!viz[y]) {
rez = DFS(y);
if (rez >= 0)
sum += rez;
}
}
return smax[x] = sum;
}