Pagini recente » Urmasii lui Moisil 2016, Clasa a 10-a | Cod sursa (job #160003) | Profil rockoana | Cod sursa (job #2053819) | Cod sursa (job #2766936)
#include <iostream>
#include <vector>
#include <fstream>
#define INFINITY 0x3f3f3f3f
#define maxi 16000
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
int tata[1+maxi],val[1+maxi],dinamica[1+maxi],n,summy=-INFINITY;
vector<int> V[1+maxi];
bool viz[1+maxi];
void READ()
{
int a,b;
f>>n;
for(int i=1;i<=n;i++)
f>>val[i];
for(int i=1;i<=n-1;i++)
{
f>>a>>b;
V[a].push_back(b);
V[b].push_back(a);
}
f.close();
return;
}
int DFS(int x)
{
viz[x]=true;
dinamica[x]=val[x];
for(auto a:V[x])
{
if(!viz[a])
{
tata[a]=x;
if(a!=tata[x])
{
DFS(a);
}
if(val[a]>=0)
dinamica[x]+=dinamica[a];
}
}
return val[x];
}
int main()
{
READ();
DFS(1);
for(int i=1;i<=n;i++)
if(dinamica[i]>summy)
summy=dinamica[i];
g<<summy;
g.close();
return 0;
}