Pagini recente » Cod sursa (job #2715312) | Cod sursa (job #2496555) | Borderou de evaluare (job #103673) | Cod sursa (job #240128) | Cod sursa (job #1189200)
#include <cstdio>
#include <vector>
const int MAX = 16010;
using namespace std;
int viz[MAX],sum[MAX];
vector <int> gr[MAX];
int maxim=0,n;
void dfs(int nod);
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;++i)scanf("%d",sum+i);
for(int i=1;i<n;++i){
int x,y;
scanf("%d%d",&x,&y);
gr[x].push_back(y);
gr[y].push_back(x);
}
dfs(1);
printf("%d\n",maxim);
return 0;
}
void dfs(int nod){
vector <int> ::iterator it;
viz[nod]=1;
for(it = gr[nod].begin();it!=gr[nod].end();++it){
if(!viz[*it]){
dfs(*it);
if(sum[*it]>0)sum[nod]+=sum[*it];
}
if(sum[nod]>maxim)maxim=sum[nod];
}
}