Cod sursa(job #2539460)

Utilizator CristiVintilacristian vintila CristiVintila Data 5 februarie 2020 21:25:47
Problema Asmax Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");

int n, m, dist[16000], maxim = -(1<<30);
vector< pair<int, int> > gr[16000];
vector<int> val;
queue<int> q;
bool viz[16000];

void citire() {
    fin >> n;
    for (int i = 0; i < n; i++) {
        int x;
        fin >> x;
        val.push_back(x);
    }
    for (int i = 0; i < n - 1; i++) {
        int x, y;
        fin >> x >> y;
        gr[x].push_back(make_pair(y, val[y - 1]));
        gr[y].push_back(make_pair(x, val[x - 1]));
    }
}

void parcurgere(int nod) {
    q.push(nod);
    viz[nod] = true;
    dist[nod] = val[nod - 1];
    maxim = dist[nod];
    while (!q.empty()) {
        int nodCr = q.front();
        q.pop();
        for (int i = 0; i < gr[nodCr].size(); i++) {
            int vecin = gr[nodCr][i].first;
            int cost = gr[nodCr][i].second;
            if (!viz[vecin]) {
                dist[vecin] = cost + maxim;
                maxim = max(maxim, dist[vecin]);
                viz[vecin] = true;
                q.push(vecin);
            }
        }
    }
}

void rezolvare() {
    parcurgere(1);
    fout << maxim;
}

int main(int argc, const char * argv[]) {
    citire();
    rezolvare();
}