Cod sursa(job #2830815)

Utilizator danielcirlanDaniel Cirlan danielcirlan Data 10 ianuarie 2022 11:54:52
Problema Asmax Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <bits/stdc++.h>
#include <iostream>
#include <fstream>

using namespace std;

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

#define n_max 16002

vector<int> val(n_max);
vector<int> suma(n_max);
vector<vector<int>> lista_adiacenta;
vector<int> vizitat(n_max,0);

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

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

int main()
{
    int numar_noduri;

    f >> numar_noduri;

    int valoare;
    for(int i = 1; i <= numar_noduri; i++) f >> valoare, val[i] = valoare;

    lista_adiacenta.resize(numar_noduri+1);

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

    dfs(1);

    int rezultat = -2000000000;

    for(int i = 1; i <= numar_noduri; i++)
        if(suma[i] > rezultat) rezultat = suma[i];

    g << rezultat;

    return 0;
}