Cod sursa(job #2953675)

Utilizator Vlad_NistorNIstor Vlad Vlad_Nistor Data 11 decembrie 2022 22:45:32
Problema Asmax Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <bits/stdc++.h>
using namespace std;


vector<int> graf[16500];
int vf[16005];
int nod[16006];
int main(void){
    ofstream cout("asmax.out");
    ifstream cin("asmax.in");
    int n;
    cin >> n;
    for(int i= 1;i<=n;i++){
        cin >> nod[i];
    }
    for(int i = 1;i<=n-1;i++){
        int a, b;
        cin>> a >> b;
        graf[a].push_back(b);
        graf[b].push_back(a);
    }
    for(int i = 1;i<=n;i++){
        sort(graf[i].begin(), graf[i].end());
    }
    int maxim = -1;
    for(int nd = 1;nd<=1;nd++){ //. imi este de ajuns sa fac de la nodul 1 pentru ca stim ca graful graf este un arbore
        if(vf[nd] == 0){
            /// facem BFS -ul
            queue<int> coada;
            coada.push(nd);
            int suma = nod[nd]; /// suma subgrafului conex
            vf[nd] = 1;
            while(!coada.empty()){
                int ndd = coada.front();
                for(int i = 0;i<graf[ndd].size();i++){
                    int vecinu = graf[ndd][i];
                    if(vf[vecinu] == 0){
                        vf[vecinu] = 1;
                        suma +=nod[vecinu];
                        maxim = max(maxim, suma);
                        coada.push(vecinu);
                        vf[vecinu] = 1;
                    }
                }
                coada.pop();
            }
            maxim = max(maxim,suma);
        }
    }
    cout << maxim;
}