Pagini recente » Cod sursa (job #1817140) | Cod sursa (job #2042197) | Cod sursa (job #1400734) | Cod sursa (job #2159987) | Cod sursa (job #1442936)
#include <iostream>
#include <stdio.h>
using namespace std;
const int N=16420;
int vf[N], urm[N], lst[N], v[N], sum[N];
int rad, nr, n;
bool ver[N];
void afisare(){
int smax=-18000000;
for(int i=1;i<=n;i++){
if(smax<sum[i]) smax=sum[i];
}
FILE * out;
out=fopen("asmax.out","w");
fprintf(out,"%d",smax);
}
void adauga(int x, int y){
nr++;
vf[nr]=y;
urm[nr]=lst[x];
lst[x]=nr;
}
void citire(){
FILE * in;
in=fopen("asmax.in","r");
fscanf(in,"%d",&n);
int a,b;
for(int i=1;i<=n;i++) fscanf(in,"%d",&v[i]);
for(int i=1;i<n;i++) {
fscanf(in,"%d%d",&a,&b);
adauga(a,b);
adauga(b,a);
ver[b]=1;
}
for(int i=1;i<=n;i++) {if(ver[i]==0) rad=i; ver[i]=1;}
}
void rez(int x){
int p, y;
ver[x]=0;
sum[x]=v[x];
p=lst[x];
while(p!=0){
y=vf[p];
if(ver[y]==1){rez(y);
if(sum[y]>0)
sum[x]+=sum[y];
}
p=urm[p];
}
}
int main()
{
citire();
rez(rad);
afisare();
return 0;
}