Pagini recente » Cod sursa (job #1645548) | Cod sursa (job #2223508) | Cod sursa (job #1434584) | Cod sursa (job #2383370) | Cod sursa (job #3240044)
#include <bits/stdc++.h>
const std :: string FILENAME = "asmax";
std :: ifstream in (FILENAME + ".in");
std :: ofstream out (FILENAME + ".out");
const int NMAX = 16e3 + 5;
const int INF = 1e3;
int n;
int x;
int y;
long long maxi = -INF;
int val[NMAX];
long long dp[NMAX];
std :: vector <int> v[NMAX];
std :: bitset <NMAX> visited;
void dfs(int nod)
{
for(int i : v[nod])
{
if(visited[i] == false)
{
visited[i] = true;
dfs(i);
dp[nod] = std :: max(dp[nod], dp[nod] + dp[i]);
}
}
dp[nod] += val[nod];
}
int main()
{
in >> n;
for(int i = 1; i <= n; i ++)
{
in >> val[i];
}
for(int i = 0; i < n; i ++)
{
in >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
visited[1] = true;
dfs(1);
for(int i = 1; i <= n; i ++)
{
maxi = std :: max(maxi, dp[i]);
}
out << maxi;
return 0;
}