Pagini recente » Cod sursa (job #2446921) | Cod sursa (job #669219) | Cod sursa (job #1436234) | Cod sursa (job #829411) | Cod sursa (job #2830829)
#include <bits/stdc++.h>
using namespace std;
const int inf = 2000000000;
ifstream f("asmax.in");
ofstream g("asmax.out");
int nr_noduri, rez;
vector<int> vizitat(16001), val(16001), suma(16001);
vector<vector<int>> lista_vecini(16001);
void dfs(int nod)
{
vizitat[nod] = 1;
suma[nod] = val[nod];
for(int i = 0; i < lista_vecini[nod].size(); i++)
{
if(vizitat[lista_vecini[nod][i]] == 0)
{
dfs(lista_vecini[nod][i]);
if (suma[nod] < suma[nod] + suma[lista_vecini[nod][i]])
suma[nod] = suma[nod] + suma[lista_vecini[nod][i]];
}
}
}
int main()
{
f >> nr_noduri;
for(int i = 1; i <= nr_noduri; i++)
{
int valoare;
f >> valoare;
val[i] = valoare;
}
int nod1, nod2;
for(int i = 1; i < nr_noduri; i++)
{
f >> nod1 >> nod2;
lista_vecini[nod1].push_back(nod2);
lista_vecini[nod2].push_back(nod1);
}
dfs(1);
rez = -inf;
for(int i = 1; i <= nr_noduri; i++)
if(rez < suma[i])
rez = suma[i];
g << rez;
return 0;
}