Pagini recente » Cod sursa (job #804833) | Cod sursa (job #238035) | Cod sursa (job #2902025) | Cod sursa (job #1998007) | Cod sursa (job #2819871)
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int N = 16010, INF = 1e9 + 1;
vector <int> adj[N];
int val[N], sum[N];
bitset <N> viz;
void dfs(int nod) {
viz[nod] = 1;
sum[nod] += val[nod];
for (auto vec : adj[nod]) {
if (!viz[vec]) {
dfs(vec);
sum[nod] = max(sum[nod], sum[nod] + sum[vec]);
}
}
}
int main() {
int n;
fin >> n;
for (int i = 1; i <= n; i++) fin >> val[i];
for (int i = 1; i < n; i++) {
int a, b;
fin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
dfs(1);
int maxi = -INF;
for (int i = 1; i <= n; i++) maxi = max(maxi, sum[i]);
fout << maxi;
return 0;
}