Cod sursa(job #2827545)

Utilizator IPCristianIlie Cristian IPCristian Data 5 ianuarie 2022 21:05:50
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>

#define nr 16002

using namespace std;

int suma_maxima=-1000*nr;

int DF(const int i,bool vizitat[],int valori[],vector<int> muchii[])
{
    vizitat[i] = true;
    int suma_elem_curent = valori[i];
    int size_arce = muchii[i].size();
    for (int j=0;j<size_arce;j++)
    {
        int nod_vec = muchii[i][j];
        if (!vizitat[nod_vec])
        {
            int suma_subarb = DF(nod_vec,vizitat,valori,muchii);
            if (suma_subarb > 0)
            {
                suma_elem_curent += suma_subarb;
            }
        }
    }

    if (suma_maxima < suma_elem_curent)
    {
        suma_maxima = suma_elem_curent;
    }

    return suma_elem_curent;
}

int main()
{
    ifstream fin("asmax.in");
    ofstream fout("asmax.out");

    int n,maxim=1;
    bool vizitat[nr];
    int valori[nr];
    vector<int> muchii[nr];

    fin>>n;
    for (int i=1;i<=n;i++)
    {
        fin>>valori[i];
        vizitat[i] = 0;
        if (valori[i] > valori[maxim])
        {
            maxim = i;
        }
    }

    int a,b;
    for (int i=0;i<n-1;i++)
    {
        fin>>a>>b;
        muchii[a].push_back(b);
        muchii[b].push_back(a);
    }

    DF(maxim,vizitat,valori,muchii);

    fout<<suma_maxima;

    fin.close();
    fout.close();

    return 0;
}