Pagini recente » Cod sursa (job #3215232) | Cod sursa (job #913192) | Cod sursa (job #2104957) | Cod sursa (job #1592207) | Cod sursa (job #1054220)
#include<cstdio>
#include<vector>
using namespace std;
vector<int> a[16001];
int v[16001];
int rasp[16001];
char viz[16001];
void dfs(int x){
viz[x]=1;
int i;
rasp[x]=v[x];
for(i=0;i<a[x].size();i++)
if (viz[a[x][i]]==0) {
dfs(a[x][i]);
if (rasp[a[x][i]]>0) rasp[x]+=rasp[a[x][i]];
}
}
int main(){
freopen ("asmax.in","r",stdin);
freopen ("asmax.out","w",stdout);
int n,i,x,y;
scanf ("%d",&n);
for(i=1;i<=n;i++)
scanf ("%d",&v[i]);
for(i=1;i<n;i++){
scanf ("%d%d",&x,&y);
a[x].push_back(y);
a[y].push_back(x);
}
dfs(1);
x=rasp[1];
for(i=2;i<=n;i++)
if (x<rasp[i]) x=rasp[i];
printf ("%d",x);
return 0;
}