Pagini recente » Cod sursa (job #289436) | Cod sursa (job #2285800) | Cod sursa (job #1389831) | Cod sursa (job #1899879) | Cod sursa (job #356724)
Cod sursa(job #356724)
#include<cstdio>
#define N 16001
int rez,x[N],y[N],d[N],*a[N],v[N],n;
bool viz[N];
void citire()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
for (int i=1; i<=n; ++i)
scanf("%d",&v[i]);
for (int i=1; i<n; ++i)
{
scanf("%d%d",&x[i],&y[i]);
++d[x[i]];
++d[y[i]];
}
for (int i=1;i<=n; ++i)
{
a[i]=new int [1+d[i]];
a[i][0]=0;
}
for (int i=1; i<n; ++i)
{
a[x[i]][++a[x[i]][0]]=y[i];
a[y[i]][++a[y[i]][0]]=x[i];
}
}
void dfs(int x0)
{
viz[x0]=true;
int max=0;
for (int i=1; i<=a[x0][0]; ++i)
{
if (viz[a[x0][i]])
continue;
dfs(a[x0][i]);
if (v[a[x0][i]]>0)
{
v[x0]+=v[a[x0][i]];
if (rez<v[x0])
rez=v[x0];
}
else
{
if(max<v[a[x0][i]])
max=v[a[x0][i]];
if (rez<max)
max=rez;
}
}
}
void afis()
{
for (int i=1; i<=n; ++i)
{
printf("%d: ",i);
for(int j=1; j<=a[i][0]; ++j)
printf("%d ",a[i][j]);
printf("\n");
}
}
int main()
{
citire();
//afis();
dfs(1);
printf("%d",rez);
return 0;
}