Pagini recente » Cod sursa (job #471439) | Cod sursa (job #2430716) | Cod sursa (job #764057) | Cod sursa (job #1442629)
#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);
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;
}