Pagini recente » Cod sursa (job #2640896) | Cod sursa (job #1793277) | Cod sursa (job #2316733) | Cod sursa (job #30783) | Cod sursa (job #2423404)
#include <bits/stdc++.h>
#define INFINIT (int)(1e8)
#define MAX (int)(16e3+5)
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n,Val[MAX],Best[MAX],ans;
vector<int> Nod[MAX];
int Dp(int,int);
void citire();
int main(){
citire();
Dp(1,1);
fout<<ans<<'\n';
return 0;
}
int Dp(int x,int y){
if(Best[x]!=INFINIT)
return Best[x];
int t=0,maxx=0,i,sz=Nod[x].size();
for(i=0;i<sz;++i){
if(Nod[x][i]!=y){
t+=Dp(Nod[x][i],x);
if(t<0)
t=0;
}
maxx=max(maxx,t);
}
t=maxx;
t+=Val[x];
Best[x]=t;
ans=max(ans,t);
return t;
}
void citire(){
int i,x,y;
fin>>n;
for(i=1;i<=n;++i){
fin>>Val[i];
Best[i]=INFINIT;
}
for(i=0;i<n;++i){
fin>>x>>y;
Nod[x].push_back(y);
Nod[y].push_back(x);
}
}