Cod sursa(job #1169451)

Utilizator andreiagAndrei Galusca andreiag Data 11 aprilie 2014 13:02:07
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <vector>

using namespace std;
const int Nmax = 16005;
const int INF = 0x3f3f3f3f;
int maxim = -INF;

int dp[Nmax];
int V[Nmax];
vector<int> G[Nmax];

void doit(int prev, int varf)
{
    dp[varf] = V[varf];
    for (int x: G[varf])
    {
        if (x != prev)
        {
            doit(varf, x);
            if (dp[x] > 0)
                dp[varf] += dp[x];
        }
    }
    if (maxim < dp[varf]) maxim = dp[varf];
    return;
}
int main()
{
    ifstream f ("asmax.in");
    ofstream g ("asmax.out");

    int N, a, b;
    f >> N;
    for (int i = 1; i <= N; i++)
        f >> V[i];

    for(int i = 1; i < N; i++)
    {
        f >> a >> b;
        G[a].push_back(b);
        G[b].push_back(a);
    }
    for (int i = 0; i <= N; i++)
        dp[i] = -INF;

    doit(0, 1);
    g << maxim << '\n';

    return 0;
}