Cod sursa(job #2824716)

Utilizator linte_robertLinte Robert linte_robert Data 3 ianuarie 2022 00:19:44
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <deque>

using namespace std;

ifstream fin("asmax.in");
ofstream fout("asmax.out");
int nr_noduri, nr_muchii;
vector < vector < int > > vecini;
vector < int > costuri;
vector < int > culoare(16003,0);
vector < int > cost_subarbori;

void vizitat(int u){
    culoare[u] = 1;
    cost_subarbori[u] = costuri[u];
    for( int i = 0; i < vecini[u].size(); i++ ){
        if( culoare[ vecini[u][i] ] == 0 ){
            vizitat(vecini[u][i]);
            if( cost_subarbori[u] + cost_subarbori[vecini[u][i]] > cost_subarbori[u] ){
                cost_subarbori[u] = cost_subarbori[u] + cost_subarbori[vecini[u][i]];
            }
        }
    }
}

int main(){
    fin >> nr_noduri;
    costuri.push_back(999999);
    vecini = vector < vector < int > > (nr_noduri+1);
    cost_subarbori.push_back(0);
    for(int i = 0; i < nr_noduri; i++){
        int cost;
        fin >> cost;
        costuri.push_back(cost);
        cost_subarbori.push_back(0);
    }
    for( int i = 0; i < nr_noduri-1; i++ ){
        int intrare, iesire;
        fin >> intrare >> iesire;
        vecini[intrare].push_back(iesire);
        vecini[iesire].push_back(intrare);
    }

    vizitat(1);
    int max = cost_subarbori[1];
    for( int i = 1; i < cost_subarbori.size(); i++ ){
        if( max < cost_subarbori[i] ) max = cost_subarbori[i];
    }
    fout << max;
}