Pagini recente » Cod sursa (job #2289181) | Cod sursa (job #966067) | Cod sursa (job #2926247) | Cod sursa (job #870546) | Cod sursa (job #2002975)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream si("asmax.in");
ofstream so("asmax.out");
vector<int>v[16005];
int x[16005],sum=-1000000000,t[16005];
int dfs(int nod)
{
int s=x[nod];
for(int f:v[nod])
{
if(t[nod]==f)
continue;
t[f]=nod;
int n=dfs(f);
s+=n;
}
sum=max(s,sum);
return max(s,0);
}
int main()
{
int n;
si>>n;
for(int i=1;i<=n;++i)
{
si>>x[i];
}
int a,b;
for(int i=1;i<n;++i)
{
si>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
}
dfs(1);
so<<sum;
return 0;
}