Pagini recente » Cod sursa (job #979172) | Cod sursa (job #2944609) | Cod sursa (job #991582) | Cod sursa (job #3226400) | Cod sursa (job #2830810)
#include <bits/stdc++.h>
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("in.in");
ofstream g("out.out");
#define n_max 16002
vector<int> val(n_max);
vector<int> suma(n_max);
vector<vector<int>> lista_adiacenta;
vector<int> vizitat(n_max,0);
void dfs(int nod)
{
vizitat[nod] = 1;
suma[nod] = val[nod];
int i;
for(i = 0; i < lista_adiacenta[nod].size(); i++)
{
if(vizitat[lista_adiacenta[nod][i]] == 0)
{
dfs(lista_adiacenta[nod][i]);
if(suma[nod] < suma[nod] + val[lista_adiacenta[nod][i]])
suma[nod] = suma[nod] + val[lista_adiacenta[nod][i]];
}
}
}
int main()
{
int numar_noduri;
f >> numar_noduri;
int valoare;
for(int i = 1; i <= numar_noduri; i++) f >> valoare, val[i] = valoare;
lista_adiacenta.resize(numar_noduri+1);
int nod1, nod2;
for(int i = 1; i < numar_noduri; i++)
{
f >> nod1 >> nod2;
lista_adiacenta[nod1].push_back(nod2);
lista_adiacenta[nod2].push_back(nod1);
}
dfs(1);
int rezultat = -2000000000;
for(int i = 1; i <= numar_noduri; i++)
if(suma[i] > rezultat) rezultat = suma[i];
g << rezultat;
return 0;
}