Pagini recente » Cod sursa (job #243114) | Cod sursa (job #1440809) | Cod sursa (job #304461) | Cod sursa (job #2595265) | Cod sursa (job #1025174)
#include<cstdio>
#include<vector>
using namespace std;
#define NMAX 16005
vector <int> a[NMAX];
int n,x,y,Max,cost[NMAX],v[NMAX],S[NMAX];
void dfs(int s)
{
int i;
v[s] = 1;
S[s] = cost[s];
for (i=0;i<a[s].size();++i)
if (!v[a[s][i]]){
dfs(a[s][i]);
if (S[a[s][i]]>0)
S[s] += S[a[s][i]];
}
if (Max<S[s])
Max=S[s];
}
int main()
{
int i;
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
scanf("%d",&cost[i]);
for (i=1;i<n;++i)
{
scanf("%d%d",&x,&y);
a[x].push_back(y);
a[y].push_back(x);
}
dfs(1);
printf("%d\n",Max);
return 0;
}