Cod sursa(job #1089177)

Utilizator StexanIarca Stefan Stexan Data 21 ianuarie 2014 16:01:42
Problema Asmax Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#include <vector>

using namespace std;

#define NMAX 16010

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

vector<int> G[NMAX];
int N, Values[NMAX],DP[NMAX],MaxSum = -200000;
bool Used[NMAX];

void DFS(int node)
{
    Used[node] = true;
    DP[node] = Values[node];
    for (vector<int>::iterator it = G[node].begin(); it != G[node].end(); ++it) {
        if (!Used[*it]) {
            DFS(*it);
            if ( DP[*it] > 0 )
                DP[node] += DP[*it];
        }
    }
}

void Read()
{
    f>>N;
    
    for (int i = 1; i <= N; i++) {
        f>>Values[i];
    }
    
    for (int x,y,i = 1; i <= N-1 ; i++) {
        f>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
}

void Solve()
{
    DFS(1);
    for (int i = 1; i <= N;  i++) {
        g<<DP[i]<<" ";
        MaxSum = max(MaxSum, DP[i]);
    }
}

void Write()
{
    g<<"\n"<<MaxSum;
}

int main()
{
    Read();
    Solve();
    Write();
    return 0;
}