Pagini recente » Statistici Nguyen Minh Nhat (minhnhatnoe) | Cod sursa (job #2928244) | Cod sursa (job #1907678) | Cod sursa (job #1899150) | Cod sursa (job #1592816)
#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);
}
cout << DFS(1);
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;
}
}
if (sum < 0)
sum = 0;
return smax[x] = sum;
}