Cod sursa(job #880487)

Utilizator Theorytheo .c Theory Data 16 februarie 2013 20:32:40
Problema Asmax Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<fstream>
#include<vector>

using namespace std;

const int Nmax = 16009;

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

int N; int SumMax[Nmax]; int Val[Nmax]; bool s[Nmax];int ValNod = -1000000;

vector<int> G[Nmax];

void Read() {

    fin >> N;
    for(int i = 1; i <= N ; ++i)
        fin >> Val[i], SumMax[i] = Val[i], ValNod = max(Val[i], ValNod);

    for(int i = 1; i < N; ++i){

        int X , Y; fin >> X >> Y;
        G[X].push_back(Y);
        G[Y].push_back(X);
    }
}

void BFS(int X){

    s[X] = true;

    for(int i = 0 ;i < G[X].size(); ++i){

        int Y = G[X][i];
        if(s[Y] == false){
            BFS(Y);
            SumMax[X] = max(SumMax[Y] + Val[X], max( max(0 ,SumMax[X]), SumMax[X] + SumMax[Y]));
        }
    }
}

int main(){

    Read ();

    BFS(1);
    int ValMax = -100000;
    for(int i = 1; i <= N; ++i)
        if(ValMax < SumMax[i])
            ValMax = SumMax[i];

    fout << max(ValMax, ValNod);
    return 0;

}