Pagini recente » Cod sursa (job #1999308) | Cod sursa (job #2020741) | Cod sursa (job #760909) | Cod sursa (job #194924) | Cod sursa (job #1716119)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
#define NMAX 16000
vector<int> ad[NMAX + 1];
vector<int> v(NMAX + 1);
vector<int> sumeMaxime(NMAX + 1);
vector<bool> vizitat(NMAX + 1);
int sumaMaxima(int nod);
int main()
{
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n;
fin >> n;
for(int i = 1; i <= n; ++i)
fin >> v[i];
for(int i = 1; i < n; ++i){
int x, y;
fin >> x >> y;
ad[x].push_back(y);
ad[y].push_back(x);
}
int smax = sumaMaxima(1);
for(int i = 1; i <= n; ++i)
if(sumeMaxime[i] > smax)
smax = sumeMaxime[i];
fout << smax << "\n";
return 0;
}
int sumaMaxima(int nod){
int suma = v[nod];
vizitat[nod] = true;
for(int i = 0; i < ad[nod].size(); ++i){
if(!vizitat[ad[nod][i]]){
int s = sumaMaxima(ad[nod][i]);
if(s > 0)
suma += s;
}
}
sumeMaxime[nod] = suma;
return suma;
}