Cod sursa(job #2915399)

Utilizator mariusn01Marius Nicoli mariusn01 Data 22 iulie 2022 15:45:19
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <vector>
#define DIM 16001
using namespace std;
vector <int> L[DIM];
/**
    se da un arbore in care nodurile au numere asociate
    sa se gaseasca un subarbore de cost maxim (suma costurilor nodurilor
    din el sa fie cat mai mare posibila)
**/
int C[DIM], D[DIM], v[DIM];
int n, i, x, y, sol = -2000000000;
void dfs(int nod) {
    v[nod] = 1;
    D[nod] = C[nod];
    for (int i=0;i<L[nod].size();i++) {
        int vecin = L[nod][i];
        if (v[vecin] == 0) {
            dfs(vecin);
            if (D[vecin] > 0)
                D[nod] += D[vecin];
        }
    }
    if (D[nod] > sol) /// aici dupa ce am trecut prin fii lui nod
                    /// putem spune ca avem valoarea finala a luo D[nod]
                    /// si o putem lua in calcul la solutie
        sol = D[nod];
}

int main () {
    ifstream fin("asmax.in");
    ofstream fout("asmax.out");
    fin>>n;
    for (i=1;i<=n;i++)
        fin>>C[i];
    for (i=1;i<=n-1;i++) {
        fin>>x>>y;
        L[x].push_back(y);
        L[y].push_back(x);
    }

    dfs(1);
    fout<<sol;
    return 0;
}