Cod sursa(job #3230483)

Utilizator PetrudpPetru Paun Petrudp Data 21 mai 2024 18:41:12
Problema Asmax Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>

using namespace std;
ifstream citire("asmax.in");
ofstream scrie("asmax.out");


const int N = 16000;

int vec[N + 1], conexiuni[N + 1][N + 1], valMax[N + 1];
bool vazut[N + 1];

int n;

void SetValMax(int x)
{
    vazut[x] = true;
    valMax[x] = vec[x];
    for(int i = 1; i <= n; i++)
    {
        if(conexiuni[x][i] == 1 && !vazut[i])
        {
            SetValMax(i);
            if(valMax[i] > 0)
            {
                valMax[x] += valMax[i];
            }
        }
    }
}

void CitireVec()
{
    citire >> n;
    for(int i = 1; i <= n; i++)
    {
        citire >> vec[i];
    }
}

void CitireLeg()
{
    for(int i = 0; i < n - 1; i++)
    {
        int nr1, nr2;
        citire >> nr1 >> nr2;
        conexiuni[nr1][nr2] = conexiuni[nr2][nr1] = 1;
    }
}

int main()
{
    CitireVec();
    CitireLeg();
    SetValMax(1);

    int maxv = -1000;
    for(int i = 1; i <= n; i++)
    {
        maxv = max(maxv, valMax[i]);
    }
    scrie << maxv;

    citire.close();
    scrie.close();
    return 0;
}