Cod sursa(job #2500716)

Utilizator mihneazarojanuMihnea Bogdan Zarojanu mihneazarojanu Data 28 noiembrie 2019 16:05:08
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <iostream>
#include <fstream>

using namespace std;

const int N = 16000, M = N - 1;
int v[N + 1], smax[N + 1], vf[2 * M + 2], urm[2 * M + 2], lst[N + 1], n, nr;
bool viz[N];

void adaug(int x, int y){
    vf[++nr] = y;
    urm[nr] = lst[x];
    lst[x] = nr;
}

void dfs(int x){
    viz[x] = true;
    smax[x] = v[x];
    for(int p = lst[x]; p != 0; p = urm[p]){
        int y = vf[p];
        if(!viz[y]){
            dfs(y);
            if(smax[y] > 0){
                smax[x] += smax[y];
            }
        }
    }
}

int main(){
    int n, summax = -16000001;
    ifstream in("asmax.in");
    in >> n;
    for(int i = 0; i < n; i++){
        in >> v[i];
    }
    for(int i = 0; i < n - 1; i++){
        int x, y;
        in >> x >> y;
        adaug(x - 1, y - 1);
        adaug(y - 1, x - 1);
    }
    in.close();
    dfs(0);
    for(int i = 0; i < n; i++){
        if(smax[i] > summax){
            summax = smax[i];
        }
    }
    ofstream out("asmax.out");
    out << summax;
    out.close();
    return 0;
}