Pagini recente » Cod sursa (job #702178) | Istoria paginii utilizator/carmen42 | Cod sursa (job #771575) | Cod sursa (job #720131) | Cod sursa (job #1442632)
#include <cstdio>
#include <algorithm>
#include <vector>
#define DIM 17000
#define INF ((1<<30)-1)
using namespace std;
int N, M, D[DIM], Frec[DIM], A[DIM], X, Y, maxim, sum;
vector <int> V[DIM];
void DFS(int nod){
Frec[nod] = 1;
D[nod] = A[nod];
for(int i = 0; i < V[nod].size(); i ++){
int vec = V[nod][i];
if(Frec[vec] == 0){
DFS(vec);
if(D[nod] > 0)
D[nod] += D[vec];
}
}
maxim = max(maxim, D[nod]);
maxim = max(maxim, sum - D[nod]);
return;
}
int main(){
freopen("asmax.in" ,"r", stdin );
freopen("asmax.out","w", stdout);
scanf("%d", &N);
for(int i = 1; i <= N; i ++){
scanf("%d", &A[i]);
sum += A[i];
}
for(int i = 1; i < N; i ++){
scanf("%d %d", &X, &Y);
V[X].push_back(Y);
V[Y].push_back(X);
}
maxim = -INF;
DFS(1); // aici prin teorema mea nededusa se agata arborele :))
printf("%d", maxim);
return 0;
}