Pagini recente » Cod sursa (job #2520675) | Cod sursa (job #3131434) | Cod sursa (job #2259917) | Cod sursa (job #2288995) | Cod sursa (job #1756217)
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <climits>
#include <math.h>
#define NMAX 16001
using namespace std;
int n;
int weights[NMAX];
int visited[NMAX], solutie[NMAX];
vector< list< int> > adList(NMAX);
int maxValue = -INT_MAX;
void dfs(int node){
visited[node] = 1;
solutie[node] = weights[node];
list<int> :: iterator it = adList[node].begin();
while(it != adList[node].end()){
int neigh = *it;
if(visited[neigh] == 0){
dfs(neigh);
if(solutie[neigh] > 0)
solutie[node] += solutie[neigh];
}
it ++;
}
}
int main(){
int a, b;
ifstream f("asmax.in");
ofstream g("asmax.out");
f >> n;
for(int i = 1; i <= n; i++)
f >> weights[i];
maxValue = weights[1];
for(int i = 0; i < n - 1; i++){
f >> a >> b;
adList[a].push_back(b);
adList[b].push_back(a);
}
f.close();
dfs(1);
for(int i = 0; i < n; i++)
maxValue = max(maxValue, solutie[i]);
g << maxValue;
g.close();
return 0;
}