Cod sursa(job #2830829)

Utilizator danielcirlanDaniel Cirlan danielcirlan Data 10 ianuarie 2022 12:04:36
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <bits/stdc++.h>

using namespace std;

const int inf = 2000000000;

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

int nr_noduri,  rez;
vector<int> vizitat(16001), val(16001), suma(16001);
vector<vector<int>> lista_vecini(16001);

void dfs(int nod)
{
    vizitat[nod] = 1;
    suma[nod] = val[nod];

    for(int i = 0; i < lista_vecini[nod].size(); i++)
    {
        if(vizitat[lista_vecini[nod][i]] == 0)
        {
            dfs(lista_vecini[nod][i]);
            if (suma[nod] < suma[nod] + suma[lista_vecini[nod][i]])
                suma[nod] = suma[nod] + suma[lista_vecini[nod][i]];
        }
    }
}

int main()
{
    f >> nr_noduri;

    for(int i = 1; i <= nr_noduri; i++)
    {
        int valoare;
        f >> valoare;
        val[i] = valoare;
    }

    int nod1, nod2;
    for(int i = 1; i < nr_noduri; i++)
    {
        f >> nod1 >> nod2;
        lista_vecini[nod1].push_back(nod2);
        lista_vecini[nod2].push_back(nod1);
    }

    dfs(1);

    rez = -inf;

    for(int i = 1; i <= nr_noduri; i++)
        if(rez < suma[i])
            rez = suma[i];

    g << rez;
    return 0;
}