Pagini recente » Cod sursa (job #1602853) | Cod sursa (job #2731484) | Cod sursa (job #1490769) | Cod sursa (job #2424397) | Cod sursa (job #3224836)
#include <bits/stdc++.h>
#define MAXN 16000
using namespace std;
vector <int> v[MAXN + 1];
int val[MAXN + 1];
char viz[MAXN + 1];
int sum[MAXN + 1];
int rez = -1e9;
void dfs(int node){
viz[node] = 1;
sum[node] = val[node];
for(auto &i : v[node]){
if(viz[i] == 0){
dfs(i);
sum[node] += sum[i];
sum[node] = max(0, sum[node]);
}
}
rez = max(rez, sum[node]);
}
int main(){
FILE *fin, *fout;
int n, i, x, y;
fin = fopen( "asmax.in", "r" );
fscanf(fin, "%d", &n);
for( i = 1; i <= n; i++ )
fscanf( fin, "%d", &val[i] );
for( i = 0; i < n; i++ ){
fscanf(fin, "%d%d", &x, &y);
v[x].push_back(y);
v[y].push_back(x);
}
fclose( fin );
fout = fopen( "asmax.out", "w" );
dfs(1);
fprintf(fout, "%d\n", rez);
fclose( fout );
return 0;
}