Cod sursa(job #1851451)

Utilizator jurjstyleJurj Andrei jurjstyle Data 19 ianuarie 2017 19:17:46
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <vector>

using namespace std;

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

vector <int> G[16002];
vector <int> Viz, V, Sum;
int n;

void DFS(int current_node)
{
    Viz[current_node] = 1;
    Sum[current_node] = V[current_node];
    for (const int & x : G[current_node])
        if (Viz[x] == 0)
        {
            DFS(x);
            if (Sum[x] > 0)
                Sum[current_node] += Sum[x];
        }
}

int main()
{
    f >> n;
    Viz = V = vector<int> (n + 1);
    Sum = vector<int>(n + 1, -1e9);
    for (int i = 1; i <= n; ++i)
        f >> V[i];
    for (int i = 1; i < n; ++i)
    {
        int x, y;
        f >> x >> y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
    DFS(1);
    int sum_max = -1e9;
    for (int i = 1; i <= n; ++i)
        if (Sum[i] > sum_max)
            sum_max = Sum[i];
    g << sum_max;
    f.close();
    g.close();
    return 0;
}