Pagini recente » Cod sursa (job #984170) | Monitorul de evaluare | Cod sursa (job #1104890) | Istoria paginii runda/brasov_city_challenge | Cod sursa (job #2507584)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int dim = 16005;
const int INF = -1001 * dim;
int v[dim],n,cost_max[dim],grad[dim],nr;
vector <int> vec[dim];
void DFS(int nod,int parent)
{
for (auto p:vec[nod])
{
if (p != parent)
{
DFS(p,nod);
cost_max[nod] = max(cost_max[nod],cost_max[nod] + cost_max[p]);
}
}
}
int main()
{
in >> n;
for (int i=1; i<=n; i++) in >> v[i];
for (int i=1,x,y; i<=n-1; i++)
{
in >> x >> y;
grad[x]++;
grad[y]++;
vec[x].push_back(y);
vec[y].push_back(x);
}
for (int i=1; i<=n; i++) cost_max[i] = v[i];
DFS(1,0);
int maxi = INF;
for (int i=1; i<=n; i++) maxi = max(maxi , cost_max[i]);
out << maxi;
return 0;
}