Pagini recente » Cod sursa (job #923877) | Cod sursa (job #2737942) | Cod sursa (job #2321696) | Cod sursa (job #336612) | Cod sursa (job #419666)
Cod sursa(job #419666)
#include <stdio.h>
#include <vector>
using namespace std;
vector <int> c[16001];
int v[16001],a[16001],maxim=-1001;
int dfs(int nod)
{
int s=a[nod],len=c[nod].size(),x,i;
for (i=0;i<len;i++)
if (!v[c[nod][i]])
{
v[c[nod][i]]=1;
x=dfs(c[nod][i]);
if (x>0) s+=x;
}
if (s>maxim) maxim=s;
return s;
}
int main()
{
int n,x,y,i;
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
for (i=1;i<n+1;i++) scanf("%d",&a[i]);
for (i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
c[x].push_back(y);
c[y].push_back(x);
}
v[1]=1;
x=dfs(1);
printf("%d",maxim);
return 0;
}