Pagini recente » Cod sursa (job #544204) | Cod sursa (job #1437292) | Cod sursa (job #2269104) | Cod sursa (job #54454) | Cod sursa (job #2050510)
#include <vector>
#include <cstdio>
#define N 16005
#define max(a,b) a>b?a:b
using namespace std;
int n, x, y, a[N], t[N], din[N], maxi=-9999999;
vector <int> graf[N];
void dfs(int nod)
{
din[nod]+=a[nod];
maxi=max(maxi, a[nod]);
for(int i=0;i<graf[nod].size();i++)
{
int v=graf[nod][i];
if(t[nod]!=v)
{
t[v]=nod;
dfs(v);
if(din[v]>0)
{
din[nod]+=din[v];
maxi=max(maxi, din[nod]);
}
}
}
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
scanf("%d\n", &n);
for(int i=1;i<=n;i++)
scanf("%d ", &a[i]);
for(int i=1;i<=n-1;i++)
{
scanf("%d %d\n", &x, &y);
graf[x].push_back(y);
graf[y].push_back(x);
}
dfs(1);
printf("%d ", maxi);
return 0;
}