Pagini recente » Cod sursa (job #264684) | Cod sursa (job #1411839) | Cod sursa (job #470895) | Cod sursa (job #2519692) | Cod sursa (job #2825212)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int sum;
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);
if(sum + res > sum)
sum = sum + res;
}
}
if(sum > sum_max)
sum_max = sum;
return sum;
}
void solve(int 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);
}
sum = -999999;
int res = asmax(1, sum);
fout << sum;
}
int main()
{
int n;
fin>>n;
solve(n);
return 0;
}