Pagini recente » Cod sursa (job #1158673) | Cod sursa (job #472461) | Cod sursa (job #1178750) | Cod sursa (job #2876007) | Cod sursa (job #1148952)
#include <stdio.h>
using namespace std;
int vf[200001], nr=0, urm[200001], lst[200001],v[16001],aux,summax=-1000999;
bool viz[100011];
inline void adauga(int x, int y)
{
++nr;
vf[nr]=y;
urm[nr]=lst[x];
lst[x]=nr;
}
void dfs(int x)
{
viz[x]=true;
int y,p;
p=lst[x];
while (p!=0)
{
y=vf[p];
if(!viz[y])
{
dfs(y);
if (v[y] > 0)
v[x] += v[y];
}
p=urm[p];
}
}
int main()
{
int n,m,x,y;
FILE * in, *out;
in=fopen ("asmax.in","r");
out=fopen ("asmax.out","w");
fscanf(in,"%d",&m);
for(int i=1;i<=m;i++)
{
fscanf(in,"%d" , &v[i]);
}
for(int i=1;i<m;i++)
{
fscanf(in,"%d%d",&x,&y);
adauga(x,y);
adauga(y,x);
}
dfs(1);
for(int i=1;i<=m;i++)
{
if(v[i]>=summax) summax=v[i];
}
fprintf(out,"%d",summax);
return 0;
}