Cod sursa(job #2467409)

Utilizator DordeDorde Matei Dorde Data 4 octombrie 2019 11:41:11
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f ("asmax.in");
ofstream g ("asmax.out");
int const NM = 16001;
int v [NM] , vf [1 + 2 * NM] , nxt [1 + 2 * NM] , val [NM] , dp [NM];
int sz;
bool viz [NM];
void add (int x , int y){
    ++ sz;
    vf [sz] = y;
    nxt [sz] = v [x];
    v [x] = sz;
}
void dfs (int node){
    viz [node] = true;
    for(int i = v [node] ; i ; i = nxt [i]){
        int y = vf [i];
        if (! viz [y]){
            dfs (y);
            dp [node] = max (dp [node] + dp [y] , dp [node]);
        }
    }
}
int main()
{
    int n;
    f >> n;
    for(int i = 1 ; i <= n ; ++ i)
        f >> val [i];
    for(int i = 1 ; i < n ; ++ i){
        int a , b;
        f >> a >> b;
        add (a , b);
        add (b , a);
    }
    for(int i = 1 ; i <= n ; ++ i)
        dp [i] = val [i];
    for (int i = 1 ; i <= n ; ++ i)
        if (! viz [i])
            dfs (i);
    g << *max_element (dp + 1 , dp + 1 + n);
    return 0;
}