Cod sursa(job #2500698)

Utilizator mihneazarojanuMihnea Bogdan Zarojanu mihneazarojanu Data 28 noiembrie 2019 15:44:32
Problema Asmax Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 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;
}

int 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]){
            smax[x] += max(0, dfs(y));
        }
    }
    return smax[x];
}

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