Pagini recente » Cod sursa (job #1441521) | Cod sursa (job #814462) | Cod sursa (job #2325112) | Cod sursa (job #2545175) | Cod sursa (job #1429176)
#include <iostream>
#include <vector>
using namespace std;
const int NMAX = 16000 + 1;
const int INF = 1<<30;
struct {
vector<short int> vecini;
// short int val;
int suma = 0;
bool vizitat = false;
} nod[NMAX];
int dfs(const int v) {
nod[v].vizitat = true;
for (auto u: nod[v].vecini) {
if (!nod[u].vizitat) {
dfs(u);
}
if (nod[u].suma > 0) {
nod[v].suma += nod[u].suma;
}
}
return nod[v].suma;
}
int main() {
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
int N; scanf("%d", &N);
for (int v = 1; v <= N; v++) {
scanf("%d", &nod[v].suma);
}
for (int i = 2; i <= N; i++) {
int v, u;
scanf("%d %d", &v, &u);
nod[v].vecini.push_back(u);
}
for (int v = 1; v <= N; v++) {
if (!nod[v].vizitat) {
dfs(v);
}
}
int smax = -INF;
for (int v = 1; v <= N; v++) {
// printf("%d %d\n", v, nod[v].suma);
smax = max(smax, nod[v].suma);
}
printf("%d", smax);
return 0;
}