Pagini recente » Cod sursa (job #2733648) | Cod sursa (job #2895547) | Cod sursa (job #1636735) | Cod sursa (job #1434963) | Cod sursa (job #2827545)
#include <bits/stdc++.h>
#define nr 16002
using namespace std;
int suma_maxima=-1000*nr;
int DF(const int i,bool vizitat[],int valori[],vector<int> muchii[])
{
vizitat[i] = true;
int suma_elem_curent = valori[i];
int size_arce = muchii[i].size();
for (int j=0;j<size_arce;j++)
{
int nod_vec = muchii[i][j];
if (!vizitat[nod_vec])
{
int suma_subarb = DF(nod_vec,vizitat,valori,muchii);
if (suma_subarb > 0)
{
suma_elem_curent += suma_subarb;
}
}
}
if (suma_maxima < suma_elem_curent)
{
suma_maxima = suma_elem_curent;
}
return suma_elem_curent;
}
int main()
{
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n,maxim=1;
bool vizitat[nr];
int valori[nr];
vector<int> muchii[nr];
fin>>n;
for (int i=1;i<=n;i++)
{
fin>>valori[i];
vizitat[i] = 0;
if (valori[i] > valori[maxim])
{
maxim = i;
}
}
int a,b;
for (int i=0;i<n-1;i++)
{
fin>>a>>b;
muchii[a].push_back(b);
muchii[b].push_back(a);
}
DF(maxim,vizitat,valori,muchii);
fout<<suma_maxima;
fin.close();
fout.close();
return 0;
}