Cod sursa(job #1442629)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 25 mai 2015 22:28:51
Problema Asmax Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#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;
}