Pagini recente » Cod sursa (job #373894) | Cod sursa (job #337021) | Cod sursa (job #1329393) | Cod sursa (job #929450) | Cod sursa (job #2913775)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream reader("asmax.in");
ofstream writer("asmax.out");
const int inf = 1e9 + 12415;
void dfs (int nod, vector< vector<int>>& a, vector <int>& val, vector <bool>& viz, vector <int>& rez)
{
viz[nod] = true;
for(int it : a[nod])
{
if(!viz[it])
{
dfs(it, a, val, viz, rez);
if(rez[nod] + rez[it] > rez[nod])
rez[nod] += rez[it];
}
}
}
int main()
{
// #ifndef ONLINE_JUDGE
// freopen("input", "r", stdin);
// freopen("outputs", "w", stdout);
// #endif
int n;
reader >> n;
vector <int> val(n + 1);
for(int i = 1; i <= n; ++i)
reader >> val[i];
vector <vector <int>> a(n + 1);
for(int i = 1; i < n; ++i)
{
int x, y;
reader >> x >> y;
a[x].emplace_back(y);
a[y].emplace_back(x);
}
vector <bool> viz(n + 1, false);
vector <int> rez(n + 1, 0);
for(int i = 1; i <= n; ++i)
rez[i] = val[i];
dfs(1, a, val, viz, rez);
int maxi = -1e9;
for(int i = 1; i <= n; ++i)
maxi = max(maxi, rez[i]);
writer << maxi;
return 0;
}