Cod sursa(job #2830794)

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

using namespace std;

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

void dfs(int nod, vector<bool> &vizitat, vector<vector<int>> &lista_adiacenta, vector<int> &val, vector<int> &suma){

   vizitat[nod] = true;
   suma[nod] = val[nod];

   for(int i = 0; i < lista_adiacenta[nod].size(); i++){
        if(vizitat[lista_adiacenta[nod][i]] == false){
            dfs(lista_adiacenta[nod][i],vizitat,lista_adiacenta,val,suma);
            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;

    vector<int> val(numar_noduri+1);
    vector<int> suma(numar_noduri+1);

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

    vector<vector<int>> lista_adiacenta;
    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);
    }

    vector<bool> vizitat(numar_noduri+1,false);
    dfs(1,vizitat,lista_adiacenta,val, suma);

    int rezultat = suma[1];

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

    g << rezultat;

    return 0;
}