Pagini recente » Cod sursa (job #670328) | Cod sursa (job #1354135) | Cod sursa (job #2373538) | Cod sursa (job #1692256) | Cod sursa (job #1069498)
# include<cstdio>
# include <vector>
# define NMAX 16001
using namespace std;
vector <int> a[NMAX];
int n, x, y, Max=-NMAX*1000, cost[NMAX], viz[NMAX], S[NMAX];
void dfs(int k)
{
int i;
viz[k] = 1;
S[k] = cost[k];
for (i=0; i<(int) a[k].size();++i)
if (!viz[a[k][i]])
{
dfs(a[k][i]);
if (S[a[k][i]]>0)
S[k] += S[a[k][i]];
}
if (Max<S[k])
Max=S[k];
}
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;
}