Pagini recente » Cod sursa (job #1650713) | Cod sursa (job #693057) | Cod sursa (job #35205) | Cod sursa (job #64871) | Cod sursa (job #390343)
Cod sursa(job #390343)
#include <stdio.h>
#include <iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<deque>
#define ll long long
#define N (20000)
using namespace std;
bool viz[N];
int val[N];
int ans[N];
vector<int> e[N];
int n;
void dfs(int cur)
{
if (!viz[cur])
{
viz[cur] = true;
int s = 0;
for (int i = 0; i < e[cur].size(); i++)
{
if (!viz[e[cur][i]])
{
dfs(e[cur][i]);
s += ans[e[cur][i]];
}
}
ans[cur] = max(0, max(val[cur], val[cur] + s));
}
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> val[i];
}
for (int i = 0; i < n - 1; i++)
{
int u, v;
cin >> u >> v;
u--;
v--;
e[u].push_back(v);
e[v].push_back(u);
}
dfs(0);
int pos = 0;
for (int i = 0; i < n; i++)
if (val[i] > 0) pos++;
int m = val[0];
if (pos == 0)
{
for (int i = 0; i < n; i++)
{
m = max(val[i], m);
}
} else
{
for (int i = 0; i < n; i++)
{
m = max(val[i], max(m, ans[i]));
}
}
printf("%d\n", m);
return 0;
}