Pagini recente » Cod sursa (job #977834) | Cod sursa (job #279142) | Cod sursa (job #584) | Cod sursa (job #2887654) | Cod sursa (job #2829900)
#include <bits/stdc++.h>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
int n;
int suma_max = -1001;
long long suma[16001];
bool viz[16001];
vector<vector<int>> lista_adiacenta;
vector<int> valoare;
void citire()
{
in >> n;
lista_adiacenta.resize(n+5);
valoare.push_back(0);
for(int i = 1; i <= n; i++)
{
int val;
in >> val; //valorile asoc. nodurilor
valoare.push_back(val);
}
for(int i = 1; i <= n-1; i++)
{
int a, b;
in >> a >> b;
//muchiile
lista_adiacenta[a].push_back(b);
lista_adiacenta[b].push_back(a);
}
}
void DFS(int nod)
{
suma[nod] = valoare[nod];
viz[nod] = 1;
for(auto vecin : lista_adiacenta[nod])
if(viz[vecin] == 0)
{
DFS(vecin);
suma[nod] = max(suma[nod], suma[nod] + suma[vecin]);
}
}
void asmax()
{
for(int i = 1; i <= n; i++)
{
if(suma[i] > suma_max)
suma_max = suma[i];
}
out << suma_max;
}
int main()
{
citire();
DFS(1);
asmax();
return 0;
}