Pagini recente » Cod sursa (job #1315946) | Cod sursa (job #588097) | Cod sursa (job #2709928) | Cod sursa (job #1732812) | Cod sursa (job #2202285)
#include <bits/stdc++.h>
#define N 16001
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
int nr,vf[N],urm[N],lst[N],arr[N],m;
bool viz[N];
int dfs(int x)
{
viz[x]=true;
int p=lst[x],y,s=arr[x];
while(p)
{
y=vf[p];
if(!viz[y])
s+=max(0,dfs(y));
p=urm[p];
}
m=max(m,s);
return s;
}
void ad(int x,int y)
{
vf[++nr]=y;
urm[nr]=lst[x];
lst[x]=nr;
}
int main()
{
int n,i,x,y;
in>>n;
for(i=1;i<=n;i++)
in>>arr[i];
for(i=1;i<n;i++)
{
in>>x>>y;
ad(x,y);
ad(y,x);
}
m=arr[1];
dfs(1);
out<<m;
return 0;
}