Cod sursa(job #2092229)

Utilizator ancabdBadiu Anca ancabd Data 21 decembrie 2017 13:21:02
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#include <vector>

using namespace std;

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

#define INF 0x3f3f3f

typedef vector<int> VI;
typedef vector<VI> VII;
typedef vector<bool> VB;

int n;
VII G;
VI sarb, A;
VB viz;

void Read();
void Dfs(int x);
void Write();

int main()
{
    Read();
    Dfs(1);
    Write();
    return 0;
}
void Read()
{
    fin >> n;

    G = VII(n + 1);
    A = sarb = VI(n + 1);
    viz = VB(n + 1);

    for (int i = 1; i <= n; i ++)
        fin >> A[i];

    for (int i = 1, x, y; i < n; i ++)
    {
        fin >> x >> y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
}
void Dfs(int x)
{
    int sum = 0;
    viz[x] = 1;
    for (unsigned int i = 0; i < G[x].size(); i ++)
        if (!viz[G[x][i]])
        {
            Dfs(G[x][i]);
            sum += max(sarb[G[x][i]], 0);
        }
    sum += A[x];
    sarb[x] = sum;
}
void Write()
{
    int mx = INF * -1;
    for (int i = 1; i <= n; i ++)
        mx = max(mx, sarb[i]);
    fout << mx;
}