Cod sursa(job #2832615)

Utilizator enestianEne Sebastian enestian Data 13 ianuarie 2022 23:09:09
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream f("asmax.in");
ofstream g("asmax.out");

const int N_Max = 16001;
vector<int> vecini[N_Max];
int N;
int reward[N_Max];
bool viz[N_Max];


void citire()
{
    f >> N;
    for (int i = 1; i <= N; i++)
    {
        f >> reward[i];
    }
    for (int i = 1; i <= N - 1; i++)
    {
        int x, y;
        f >> x >> y;
        vecini[x].push_back(y);
        vecini[y].push_back(x);
    }
}


void afisare(int &suma_max)
{
    g << suma_max;
    f.close();
    g.close();
}

int DFS_summax(int node, int &suma_max)
{
    int suma_now= reward[node];
    viz[node] = true;  

    for(int i=0; i<vecini[node].size(); i++)
    {
        if (viz[vecini[node][i]] == false) 
        {
           int suma_vecin = DFS_summax(vecini[node][i], suma_max);
            if (suma_vecin > 0) 
                suma_now = suma_now+ suma_vecin;           
        }
    }
    suma_max = max(suma_max, suma_now);
    return suma_now;
}

int main() {
    int nodstart = 1;
    int suma_max = -1000000;


    citire();
    DFS_summax(nodstart, suma_max);
    afisare(suma_max);

    return 0;
}