Cod sursa(job #2676159)

Utilizator Ionut2791Voicila Ionut Marius Ionut2791 Data 23 noiembrie 2020 17:20:33
Problema Asmax Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <limits.h>
#include <algorithm>
using namespace std;

const int N = 16005;

int n, mx = INT_MIN;
vector<int> graf[N];
int cost[N];
bool amfost[N];

queue<int> coada;

void calc(int nod) {

    coada.push(nod);

    while(coada.empty() == false) {
        nod = coada.front();
        coada.pop();

        if(amfost[nod])
            continue;

        amfost[nod] = true;

        int newcost = cost[nod];
        for (int i = 0; i < (int)graf[nod].size(); ++i) {
            int to = graf[nod][i];

            if(amfost[to] == false) {
                newcost = max(newcost + cost[to], newcost);
            }

        }

        for (int i = 0; i < (int)graf[nod].size(); ++i) {

            int to = graf[nod][i];

            if(amfost[to] == false) {
                coada.push(to);
                cost[to] = newcost;
            }
        }
      //  cout << '\n';
    }

}



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

    int n;
    fin >> n;

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

    for (int i = 1; i < n; ++i) {
        int a, b;
        fin >> a >> b;
        graf[a].push_back(b);
        graf[b].push_back(a);
    }

    calc(1);

    for (int i = 1; i <= n; ++i) {
       // cout << cost[i] << '\n';
        mx = max(cost[i], mx);
    }
  //  cout << '\n';
    fout << mx << '\n';
    return 0;
}