Cod sursa(job #2749452)

Utilizator Casian_doispeChiriac Casian Casian_doispe Data 6 mai 2021 18:50:00
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <vector>
#include <deque>
#include <stack>
#include <algorithm>
#include <limits.h>

using namespace std;
ifstream cin("asmax.in") ;
ofstream cout("asmax.out") ;

int n ;

vector<int> v[16009] ;

long long sums[100009], val[100009], verif[100009] ;

long long recur(int x)
{

    long long sum = 0 ;

    if(sums[x] != INT_MIN)return sums[x] ;

    verif[x] = 1 ;

    for(int f = 0 ; f < v[x].size() ; f ++)
    {

        int curent = v[x][f] ;

        if(sums[curent] == INT_MIN && !verif[curent])sums[curent] = recur(curent) ;

        if(sums[curent] > 0)sum += sums[curent] ;

    }

    return sum + val[x] ;

}

int main()
{

    cin >> n ;

    for(int f = 1 ; f <= n ; f ++)
        cin >> val[f], sums[f] = INT_MIN ;

    for(int a, b, f = 1 ; f < n ; f ++)
        cin >> a >> b, v[a].push_back(b), v[b].push_back(a) ;

    long long mx = recur(1) ;

    for(int f = 1 ; f <= n ; f ++)
        mx = max(mx, sums[f]) ;

    cout << mx ;

    return 0;
}