Pagini recente » Cod sursa (job #2632898) | Cod sursa (job #1842944) | Cod sursa (job #267964) | Cod sursa (job #2897553) | Cod sursa (job #2648285)
#include <iostream>
#include <fstream>
#include <vector>
#define NMax 16001
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
vector<int> nodes[NMax];
int n, value[NMax], nrEdges[NMax];
unsigned int visited[NMax];
int sumMax=-9999, start;
void read(){
f >> n;
int a,b;
for (int i=1; i<=n; i++){
f >> value[i];
if (value[i] > sumMax)
sumMax = value[i];
}
for (int i=1; i<n; i++){
f >> a >> b;
nrEdges[a]++;
nrEdges[b]++;
if (nrEdges[a] == 1)
start = a;
if (nrEdges[b] == 1)
start = b;
nodes[a].push_back(b);
nodes[b].push_back(a);
}
}
int sumOf(int node){
int sum = value[node];
for (int i=0; i<nodes[node].size(); i++)
if (visited[nodes[node][i]] == 0){
visited[nodes[node][i]] = 1;
int currentSum = sumOf(nodes[node][i]);
if (currentSum > 0)
sum += currentSum;
if (currentSum > sumMax)
sumMax = currentSum;
}
return sum;
}
int main()
{
read();
visited[start] = 1;
g << max(sumOf(start),sumMax);
return 0;
}