Pagini recente » Cod sursa (job #1035624) | Cod sursa (job #1081492) | Cod sursa (job #124497) | Cod sursa (job #2360068) | Cod sursa (job #1755798)
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#define NMAX 16001
using namespace std;
int n;
int weights[NMAX];
int visited[NMAX], solutie[NMAX];
vector< list< int> > adList(NMAX);
int maxValue;
void dfs(int node){
visited[node] = 1;
solutie[node] = weights[node];
for(int i = 1; i <= adList[node].size(); i++){
if(visited[i] == 0){
dfs(i);
if(solutie[i] > 0)
solutie[node] += solutie[i];
if(solutie[node] > maxValue)
maxValue = solutie[node];
}
}
}
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);
g << maxValue;
g.close();
return 0;
}