Pagini recente » Cod sursa (job #838203) | Cod sursa (job #1350770) | Cod sursa (job #2646197) | Cod sursa (job #272473) | Cod sursa (job #2986226)
#include <bits/stdc++.h>
// #define in cin
// #define out cout
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int nmax = 1e4 + 6e3 + 5e0;
int dp[nmax];
int v[nmax];
vector<int> adj[nmax];
int res = INT_MIN;
void dfs(int nod, int p = -1)
{
dp[nod] = v[nod];
for (auto i : adj[nod])
{
if (i != p)
{
dfs(i, nod);
dp[nod] += max(0, dp[i]);
}
}
res = max(res, dp[nod]);
}
int main()
{
int n;
in >> n;
for (int i = 1; i <= n; i++)
{
in >> v[i];
}
for (int i = 1; i < n; i++)
{
int a, b;
in >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
dfs(1);
out << res;
}