Pagini recente » Cod sursa (job #389914) | Cod sursa (job #1959976) | Cod sursa (job #1777302) | Cod sursa (job #151389) | Cod sursa (job #2830751)
#include <bits/stdc++.h>
#include <limits>
using namespace std;
int infinit = std::numeric_limits<int>::max();
ifstream in("asmax.in");
ofstream out("asmax.out");
int nr_N, sum_max;
vector<int> viz(16001), val(16001), sum(16001);
vector<vector<int>> vec(16001);
void DFS(int k)
{
viz[k] = 1;
sum[k] = val[k];
for(auto v:vec[k])
{
if(viz[v] == 0)
{
DFS(v);
sum[k] = max(sum[k], sum[k] + sum[v]);
}
}
}
int main()
{
in >> nr_N;
for(int i = 1; i <= nr_N; i++)
{
int x;
in >> x;
val[i] = x;
}
for(int i = 1; i <= nr_N; i++)
{
int x, y;
in >> x >> y;
vec[x].push_back(y);
vec[y].push_back(x);
}
DFS(1);
sum_max = -infinit;
for(int i = 1; i <= nr_N; i++)
{
if(sum_max < sum[i])
sum_max = sum[i];
}
out << sum_max;
return 0;
}