Pagini recente » Cod sursa (job #1838454) | Cod sursa (job #2929941) | Cod sursa (job #1125743) | Cod sursa (job #3190355) | Cod sursa (job #3140351)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("asmax.in");
ofstream cout ("asmax.out");
vector <int> fii[16001];
int suma[16001];
void SumaMaxima (int nod_actual)
{
int maxim = -2e9;
for (auto fiu : fii[nod_actual])
{
SumaMaxima(fiu);
suma[nod_actual] += max(0 , suma[fiu]);
maxim = max(maxim , suma[fiu]);
}
suma[nod_actual] = max(suma[nod_actual] , maxim);
}
int main ()
{
int noduri;
cin >> noduri;
for (int indice = 1 ; indice <= noduri ; indice++)
cin >> suma[indice];
for (int indice = 1 , nod[2] ; indice < noduri ; indice++)
{
cin >> nod[0] >> nod[1];
if (nod[0] > nod[1])
swap(nod[0] , nod[1]);
fii[nod[0]].push_back(nod[1]);
}
SumaMaxima(1);
cout << suma[1];
cout.close(); cin.close();
return 0;
}