Pagini recente » Cod sursa (job #2542913) | Cod sursa (job #604255) | Cod sursa (job #315273) | Cod sursa (job #2887905) | Cod sursa (job #1306704)
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
vector <int> g[16001];
int a[16001], Max=-10000000;
bool sel[16001];
void dfs (int x)
{
int i; sel[x]=true;
for (i=0; i<g[x].size(); i++)
{
if (!sel[g[x][i]])
{
dfs(g[x][i]);
sel[g[x][i]]=true;
if (a[g[x][i]]>0)
{
a[x]+=a[g[x][i]];
}
}
}
if (a[x]>Max) Max=a[x];
}
int main()
{
int n, i, j, x, y;
bool plus=false;
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
for (i=1; i<=n; i++)
{
scanf("%d",&a[i]);
if (a[i]>Max) Max=a[i];
}
for (i=1; i<n; i++)
{
scanf("%d%d",&x,&y);
g[x].push_back(y);
g[y].push_back(x);
}
dfs(1);
printf("%d\n",Max);
fclose(stdin);
fclose(stdout);
return 0;
}