Pagini recente » Cod sursa (job #2910944) | Cod sursa (job #2121421) | Cod sursa (job #1497584) | Cod sursa (job #2222518) | Cod sursa (job #1554091)
#include <bits/stdc++.h>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
#define MAX 16008
long long val[MAX],viz[MAX],sumsub[MAX],maxi=-100000;
vector <long long > v[MAX];
void dfs(long long nod)
{ viz[nod]=1;
sumsub[nod]=val[nod];
for(int i=0;i<v[nod].size();i++)
if(!viz[v[nod][i]])
{ dfs(v[nod][i]);
if(sumsub[v[nod][i]]>0)
sumsub[nod]+=sumsub[v[nod][i]];
}
if(sumsub[nod]>maxi)maxi=sumsub[nod];
}
int main()
{ long long n,j,k;
in>>n;
for(int i=1;i<=n;i++)
in>>val[i];
for(int i=1;i<n;i++)
{ long long a,b;
in>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
}
dfs(1);
out<<maxi;
return 0;
}