Pagini recente » Cod sursa (job #986891) | Cod sursa (job #1436066) | Cod sursa (job #1520549) | Rating Andrei Vlad (PpkAndrew) | Cod sursa (job #2030628)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int NMAX = 16005;
int N;
int V[NMAX];
int sol = NMAX * -1000;
vector <int> E[NMAX];
void Read(){
in >> N;
for(int i = 1; i <= N; ++i)
in >> V[i];
for(int i = 1; i <= N - 1; ++i){
int a, b;
in >> a >> b;
E[a].push_back(b);
E[b].push_back(a);
}
}
int Summax(int node, int parent){
int rez;
rez = V[node];
for(int i = 0; i < E[node].size(); ++i){
int neighbour = E[node][i];
if(neighbour != parent){
int outcome = Summax(neighbour, node);
if(outcome > 0)
rez += outcome;
}
}
sol = max(sol, rez);
return rez;
}
int main(){
Read();
Summax(1, 0);
out << sol << "\n";
return 0;
}