Pagini recente » Cod sursa (job #1540457) | Cod sursa (job #1906100) | Cod sursa (job #2408134) | Cod sursa (job #2377955) | Cod sursa (job #1891857)
#include<stdio.h>
#include<vector>
#define N 16001
#define MIN -20000000
using namespace std;
vector <int> v[N];
int val[N];
int viz[N];
int smax;
int dfs(int nods){
int i,nod,s,sum;
viz[nods] = 0;
sum = val[nods];
for (i=0;i<v[nods].size ();i++){
nod = v[nods][i];
if (viz[nod] == -1){
s = dfs (nod);
sum = sum > sum + s ? sum : sum + s;
}
}
smax = smax > sum ? smax : sum;
return sum;
}
int main (){
FILE *in,*out;
in = fopen ("asmax.in","r");
out = fopen ("asmax.out","w");
int n,i,rad,n1,n2;
fscanf (in,"%d",&n);
for (i=1;i<=n;i++){
fscanf (in,"%d",&val[i]);
viz[i] = -1;
}// init
for (i=1;i<=n-1;i++){
fscanf (in,"%d%d",&n1,&n2);
v[n1].push_back(n2);
v[n2].push_back(n1);
}
smax = MIN;
for (i=1;i<=n;i++){
smax = smax > val[i] ? smax : val[i];
}
dfs (1);
fprintf(out,"%d",smax);
fclose (in);
fclose (out);
return 0;
}