Cod sursa(job #2501096)

Utilizator Anakin1001George Giorgiu Gica Anakin1001 Data 29 noiembrie 2019 08:15:29
Problema Asmax Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <vector>
#include <cstring>

#define N 16000 + 1

using namespace std;

ifstream f ( "asmax.in" );
ofstream g ( "asmax.out" );

vector < int > graph[N];
bool viz[N];
int val[N], d[2][N];

void dfs ( int node ){
    viz[node] = 1;
    for ( int i = 0; i < graph[node].size(); i++ ){
        int new_node = graph[node][i];
        if ( viz[new_node] == 0 ){
            d[0][new_node] = d[0][node] + val[new_node];
            d[1][new_node] = d[0][node];
            dfs ( new_node );
            d[0][node] = max ( d[0][node], max ( d[1][new_node], d[0][new_node] ) );
            d[1][node] = max ( d[1][node], d[1][new_node] );
        }
    }
}

int main()
{   int n, i, rad, x, y, Max = -1001;
    f >> n;
    for ( i = 1; i <= n; i++ ){
        f >> val[i];
        if ( Max < val[i] ){
            Max = val[i];
            rad = i;
        }
    }
    for ( i = 1; i <= n - 1; i++ ){
        f >> x >> y;
        graph[x].push_back ( y );
        graph[y].push_back ( x );
    }
    d[0][rad] = val[rad];
    dfs ( rad );
    g << d[0][rad];
    return 0;
}