Pagini recente » Cod sursa (job #1078147) | Cod sursa (job #2760675) | Cod sursa (job #2318526) | Cod sursa (job #196276) | Cod sursa (job #1442916)
#include <cstdio>
using namespace std;
FILE *in=fopen ("asmax.in","r");
FILE *out=fopen ("asmax.out","w");
const int N=16000;
int n,vf[N],lst[N],urm[N],m,a[N],suma[N],s;
bool viz[N];
void adauga (int x,int y)
{
vf[++m]=y;
urm[m]=lst[x];
lst[x]=m;
}
int rezolvare (int x)
{
int p,y;
suma[x]=a[x];
p=lst[x];
while (p!=0)
{
y=vf[p];
suma[y]=rezolvare(y);
if (suma[y]>0)
s+=suma[y];
p=urm[p];
}
return suma[x];
}
void citire ()
{
fscanf (in,"%d",&n);
for (int i=1;i<=n;i++)
fscanf (in,"%d",&a[i]);
for (int i=1;i<n;i++)
{
int x,y;
fscanf (in,"%d%d",&x,&y);
adauga (x,y);
viz[y]=true;
}
int r;
for (int i=1;i<=n;i++)
if (!viz[i]) r=i;
rezolvare(r);
fprintf (out,"%d",s);
}
int main()
{
citire();
return 0;
}