Pagini recente » Cod sursa (job #2236203) | Cod sursa (job #2147771) | Cod sursa (job #5083) | Cod sursa (job #2320728) | Cod sursa (job #1149535)
#include<stdio.h>
#include<vector>
const int N=16001;
using namespace std;
FILE *f,*g;
vector<int> graph[N];
int summax[N], val[N]; int n;
bool seen[N];
void read(void){
f=fopen("asmax.in","r");
g=fopen("asmax.out","w");
fscanf(f,"%d",&n);
int i,a,b;
for(i=1; i<=n; i++) fscanf(f,"%d",&val[i]);
for(i=1; i<=n-1; i++){
fscanf(f,"%d%d",&a,&b);
graph[a].push_back(b);
graph[b].push_back(a);
}
}
void createmax(int a){
summax[a]=val[a];
vector<int>::iterator it=graph[a].begin();
while( it != graph[a].end() ){
if ( ! seen[*it] ){
seen[*it]=1;
createmax(*it);
if ( summax[*it] > 0 ) summax[a]+= summax[*it];
}
it++;
}
}
void solve(void){
int maxim=-1000000;
int i;
for(i=1; i<=n; i++) if ( summax[i] > maxim) maxim = summax[i];
fprintf(g,"%d",maxim);
}
int main(void){
read();
seen[1]=1;
createmax(1);
solve();
}