Cod sursa(job #2501086)

Utilizator Anakin1001George Giorgiu Gica Anakin1001 Data 29 noiembrie 2019 07:46:37
Problema Asmax Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 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;
    int length = graph[node].size();
    for ( int i = 0; i < length; 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] ) );
        }
    }
}

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