Pagini recente » Borderou de evaluare (job #1858045) | Cod sursa (job #2548528) | Cod sursa (job #2753360) | Cod sursa (job #161907) | Cod sursa (job #2830779)
#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);
if (sum[k] < sum[k] + sum[v])
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;
}
int x, y;
while(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;
}