Pagini recente » Cod sursa (job #1264785) | Cod sursa (job #1809092) | Cod sursa (job #276824) | Cod sursa (job #174226) | Cod sursa (job #1366768)
#include <stdio.h>
#include <vector>
#define Nmax 16001
#define maxim(a,b)(a>b)?a:b
using namespace std;
int n,x,y;
bool viz[Nmax];
std::vector<int> v,G[Nmax],a;
void DFS(int x0)
{
viz[x0] = true;
a[x0] = v[x0];
for(int i=0;i<G[x0].size();++i)
{
if(viz[G[x0][i]]==false)
{
DFS(G[x0][i]);
if(a[G[x0][i]]>0)
{
a[x0]+=a[G[x0][i]];
}
}
}
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
v.push_back(0);
a.resize(n+1);
for(int i=1;i<=n;++i)
{
scanf("%d",&x);
v.push_back(x);
}
for(int i=1;i<n;++i)
{
scanf("%d %d",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
}
DFS(1);
int sumamax = -(1<<30);
for(int i=1;i<=n;++i)
{
sumamax = maxim(sumamax,a[i]);
}
printf("%d",sumamax);
return 0;
}