Pagini recente » Cod sursa (job #3130134) | Cod sursa (job #1012500) | Cod sursa (job #1477309) | Cod sursa (job #3279211) | Cod sursa (job #1607687)
#include <cstdio>
#include <vector>
#include <climits>
#define NMAX 64000
#define pb push_back
using namespace std;
int n,Ans=INT_MIN;
int v[NMAX],viz[NMAX];
vector<int> g[NMAX];
void read()
{
int i,a,b;
scanf("%d",&n);
for(i=1;i<=n;++i)
scanf("%d",&v[i]);
for(i=2;i<=n;++i)
{
scanf("%d%d",&a,&b);
g[a].pb(b);
g[b].pb(a);
}
}
int dfs(int k)
{
int sumanod,suma=0;
viz[k]=1;
vector<int>::iterator it;
for(it=g[k].begin();it!=g[k].end();++it)
if(!viz[*it])
{
sumanod=dfs(*it);
suma+=sumanod;
}
suma+=v[k];
if(suma>Ans)
Ans=suma;
if(suma>0)
return suma;
return 0;
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
read();
dfs(1);
printf("%d\n",Ans);
return 0;
}