Pagini recente » Cod sursa (job #3227882) | Cod sursa (job #2794236) | Cod sursa (job #2114060) | Cod sursa (job #1146532) | Cod sursa (job #1312179)
#include <cstdio>
#include <vector>
using namespace std;
#define Nmax 16001
#define inf 0x3f3f3f3f
FILE *f=fopen ("asmax.in","r");
FILE *g=fopen ("asmax.out","w");
vector <int> G[Nmax];
int val[Nmax],sol=-inf;
bool ap[Nmax];
void DFS (int nod){
ap[nod]=1;
vector <int> :: iterator it;
for (it=G[nod].begin(); it < G[nod].end(); ++it){
if (!ap[*it]){
DFS (*it);
if (val[*it]>0){
val[nod]+=val[*it];
}
}
}
}
int main(){
int N,x,y;
fscanf (f,"%d",&N);
for (int i=1;i<=N;++i){
fscanf (f,"%d",&val[i]);
}
for (int i=1;i<N;++i){
fscanf (f,"%d%d",&x,&y);
G[x].push_back (y);
G[y].push_back (x);
}
DFS (1);
for (int i=1;i<=N;++i){
if (val[i]>sol) sol=val[i];
}
fprintf (g,"%d",sol);
return 0;
}