Pagini recente » Cod sursa (job #567136) | Cod sursa (job #2335609) | Cod sursa (job #470955) | Cod sursa (job #2934135) | Cod sursa (job #390337)
Cod sursa(job #390337)
#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;
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);
}
deque<int> q;
for (int i = 0; i < n - 1; i++)
if (e[i].size() == 1)
q.push_back(i);
while (q.size() > 0)
{
int cur = q.front();
q.pop_front();
if (!viz[cur])
{
viz[cur] = true;
int s = 0;
for (int i = 0; i < e[cur].size(); i++)
{
s += ans[e[cur][i]];
if (!viz[e[cur][i]])
q.push_back(e[cur][i]);
}
ans[cur] = max(0, max(s, val[cur]));
}
}
int m = 0;
for (int i = 0; i < n; i++)
{
m = max(m, ans[i]);
}
printf("%d\n", m);
return 0;
}