Pagini recente » Cod sursa (job #1541098) | Cod sursa (job #756293) | Cod sursa (job #2923660) | Cod sursa (job #2967002) | Cod sursa (job #1429181)
#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];
void 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;
}
}
}
}
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 = 1; i < N; i++) {
int v, u;
scanf("%d %d", &v, &u);
nod[v].vecini.push_back(u);
nod[u].vecini.push_back(v);
}
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;
}