Pagini recente » Cod sursa (job #2790326) | Cod sursa (job #1491061) | Cod sursa (job #801349) | Cod sursa (job #368859) | Cod sursa (job #2737607)
#include <bits/stdc++.h>
using namespace std;
#ifndef LOCAL
ifstream in("asmax.in");
ofstream out("asmax.out");
#define cin in
#define cout out
#endif //LOCAL
const int NMAX = 16 * 1024;
int dp[NMAX], val[NMAX];
vector<int> vec[NMAX];
int dfs(int cnt, int tat)
{
int sum = val[cnt];
for(auto son : vec[cnt])
{
if(son == tat)
continue;
int ret = dfs(son, cnt);
if(ret > 0) sum += ret;
}
dp[cnt] = sum;
return sum;
}
int main()
{
int n; cin >> n;
for(int i = 1; i <= n; i++)
cin >> val[i];
for(int i = 0; i < n - 1; i++)
{
int x, y; cin >> x >> y;
vec[x].push_back(y);
vec[y].push_back(x);
}
int root = 0;
for(int i = 1; i <= n; i++)
if(vec[i].size() == 1)
root = i;
dfs(root, 0);
int bestGraph = -1e9;
for(int i = 1; i <= n; i++)
bestGraph = max(bestGraph, dp[i]);
cout << bestGraph << endl;
}