Cod sursa(job #2050472)

Utilizator dragomirmanuelDragomir Manuel dragomirmanuel Data 28 octombrie 2017 10:01:28
Problema Asmax Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

const int NMax = 16005;
const int INF = 0x3f3f3f3f;
int N, v[NMax], dp[NMax];
vector < int > G[NMax];
int viz[NMax];

void Read()
{
    fin >> N;
    for(int i=1; i<=N; ++i)
        {
         fin >> v[i];
        }

    for(int i=1; i<N; ++i)
    {
        int x,y;
        fin >> x >> y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
}

void DFS(int nod)
{
    if(!viz[nod])
    {
        int sz = G[nod].size();

        viz[nod] = 1;

        if(sz==1)
        {
           if(v[nod] > 0)
           {
               dp[nod] = v[nod];
           }

           return;
        }

        vector < int > ::iterator it;

        for(it=G[nod].begin(); it!=G[nod].end(); ++it)
        {
            int fiu = *it;

            if(!viz[fiu])
                DFS(fiu);

            if(dp[fiu] > 0)
                dp[nod] += dp[fiu];
        }
    }
}

int main()
{
    Read();

    for(int i=1; i<=N; ++i)
    {
        if(!viz[i])
            DFS(i);
    }

    int maxi = -INF;

    for(int i=1; i<=N; ++i)
        maxi=max(maxi,dp[i]);

    fout << maxi;

    return 0;
}