Pagini recente » Cod sursa (job #443972) | Cod sursa (job #2942771) | Cod sursa (job #2912121) | Cod sursa (job #2707299) | Cod sursa (job #3309482)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("asmax.in");
ofstream fout ("asmax.out");
int n;
const int limit = 16001;
vector<vector<int>> v (limit);
vector<bool> vizitat (limit);
vector<int> val (limit), S (limit), Max (limit);
int suma_totala;
void dfs (int nod) {
vizitat[nod] = true;
Max[nod] = -1e9;
S[nod] = val[nod];
for (int i = 0; i < v[nod].size(); ++i) {
if (!vizitat[v[nod][i]]) {
dfs (v[nod][i]);
S[nod] += S[v[nod][i]];
Max[nod] = max(Max[nod], S[v[nod][i]]);
}
}
Max[nod] = max(Max[nod], suma_totala - S[nod]);
}
int main () {
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> val[i];
suma_totala += val[i];
}
for (int i = 1; i < n; ++i) {
int x, y;
fin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
dfs(1);
int maxim = -1e9;
for (int i = 1; i <= n; ++i)
if (Max[i] > maxim)
maxim = Max[i];
fout << maxim;
return 0;
}