Pagini recente » Cod sursa (job #1609321) | Cod sursa (job #587150) | Cod sursa (job #3237129) | Cod sursa (job #2103684) | Cod sursa (job #1875745)
#include <bits/stdc++.h>
using namespace std;
const int N=16005;
int v[N],d[N],viz[N];
vector <int> G[N];
void dfs(int x){
viz[x]=1;
d[x]=v[x];
for(int i=0;i<(int)G[x].size();i++){
int y=G[x][i];
if(viz[y]==0){
dfs(y);
if(d[y]>0) d[x]+=d[y];
}
}
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
int n,i,a,b,Max=0;
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%d",&v[i]);
for(i=1;i<n;i++){
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
dfs(1);
for(i=1;i<=n;i++){
if(d[i]>Max) Max=d[i];
//printf("%d ",d[i]);
}
printf("%d",Max);
return 0;
}