Pagini recente » Cod sursa (job #255507) | Cod sursa (job #498173) | Cod sursa (job #389293) | Cod sursa (job #2546317) | Cod sursa (job #1891703)
#include<stdio.h>
#include<vector>
#define N 16001
#define MIN -20000000
using namespace std;
vector <int> v[N];
int val[N];
int jos[N],sus[N];
int smax;
void dfs(int nods){
int i,nod;
for (i=0;i<v[nods].size ();i++){
nod = v[nods][i];
sus[nod] = sus[nods] + sus[nod] > sus[nod] ? sus[nods] + sus[nod] : sus[nod];
smax = smax > sus[nod] ? smax : sus[nod];
dfs (nod);
jos[nods] = jos[nod] + jos[nods] > jos[nods] ? jos[nod] + jos[nods] : jos[nods] ;
smax = smax > jos[nods] ? smax : jos[nods];
}
}
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]);
sus[i] = jos[i] = val[i];// init
}
rad = n*(n+1)/2;
for (i=1;i<=n-1;i++){
fscanf (in,"%d%d",&n1,&n2);
v[n1].push_back(n2);
rad -= n2;
}
smax = MIN;
for (i=1;i<=n;i++)
smax = smax > val[i] ? smax : val[i];
dfs (rad);
fprintf(out,"%d",smax);
fclose (in);
fclose (out);
return 0;
}