Cod sursa(job #2046720)

Utilizator CammieCamelia Lazar Cammie Data 24 octombrie 2017 06:54:10
Problema Asmax Scor 100
Compilator cpp Status done
Runda hlo2017_cj_av_l4 Marime 1.16 kb
#include <fstream>
#include <climits>
#include <vector>
#include <queue>
#include <algorithm>

#define MAXN 16004

using namespace std;

ifstream fin("asmax.in");
ofstream fout("asmax.out");

queue <int> Q;
vector <short int> G[MAXN];

int n, cost[MAXN];

inline void Read() {
    fin >> n;

    int x, y;

    for (int i = 1; i <= n; i++) {
        fin >> cost[i];
    }

    for (int i = 1; i <= n - 1; i++) {
        fin >> x >> y;

        G[x].push_back(y);
        G[y].push_back(x);
    }

    for (int i = 1; i <= n; i++) {
        if (G[i].size() == 1)
            Q.push(i);
    }
}

inline void DP() {
    int maxim = INT_MIN, z, x;

    while (!Q.empty()) {
        z = Q.front();
        Q.pop();

        if (cost[z] > maxim)
            maxim = cost[z];

        if (G[z].size() == 0)
            continue;

        x = G[z].back();
        cost[x] = max(cost[x], cost[x] + cost[z]);
        G[z].pop_back();
        G[x].erase(find(G[x].begin(), G[x].end(), z));

        if (G[x].size() == 1)
            Q.push(x);
    }


    fout << maxim;
}

int main () {
    Read();
    DP();

    return 0;
}