Pagini recente » Cod sursa (job #530984) | Cod sursa (job #1883954) | Cod sursa (job #1173760) | Cod sursa (job #1493339) | Cod sursa (job #2825206)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int s;
vector < vector < int > > adj;
vector < int > visited, vals;
int asmax(int nod, int &sum_max)
{
int sum = vals[nod];
visited[nod] = 1;
for(int i = 0; i < adj[nod].size(); ++i)
{
int vecin = adj[nod][i];
if(visited[vecin] == 0)
{
int res = asmax(vecin, sum_max);
if(sum + res > sum)
sum = sum + res;
}
}
if(sum > sum_max) sum_max = sum;
return sum;
}
void solve(int n)
{
fin>>n;
adj.resize(n + 1);
visited.resize(n + 1, 0);
vals.resize(n + 1);
for(int i = 1; i <= n; ++i)
fin >> vals[i];
for(int i = 1; i < n; ++i)
{
int x,y;
fin >> x >> y;
adj[x].push_back(y);
adj[y].push_back(x);
}
s = -1005;
int res = asmax(1, s);
fout << s;
}
int main()
{
int n;
fin>>n;
solve(n);
return 0;
}