Pagini recente » Cod sursa (job #682254) | Cod sursa (job #1430493) | Cod sursa (job #1529834) | Cod sursa (job #1032853) | Cod sursa (job #2199279)
#include<bits/stdc++.h>
using namespace std;
#define MAXN 16001
#define INF 1000000000
vector<int>g[MAXN];
int v[MAXN], d[MAXN];
char viz[MAXN];
int ans=-INF;
void dfs(int x){
int y, i;
d[x]=v[x];
viz[x]=1;
for(i=0; i<g[x].size(); i++){
y=g[x][i];
if(viz[y]==0){
dfs(y);
if(d[y]>=0)
d[x]+=d[y];
}
}
if(d[x]>ans)
ans=d[x];
}
int main(){
FILE*fin=fopen("asmax.in", "r");
FILE*fout=fopen("asmax.out", "w");
int n, i, a, b;
fscanf(fin, "%d", &n);
for(i=1; i<=n; i++)
fscanf(fin, "%d", &v[i]);
for(i=1; i<=n-1; i++){
fscanf(fin, "%d%d", &a, &b);
g[a].push_back(b);
g[b].push_back(a);
}
dfs(1);
fprintf(fout, "%d", ans);
return 0;
}