Cod sursa(job #2737607)

Utilizator redstonegamer22Andrei Ion redstonegamer22 Data 4 aprilie 2021 21:46:45
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>

using namespace std;

#ifndef LOCAL

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

#define cin in
#define cout out

#endif //LOCAL

const int NMAX = 16 * 1024;
int dp[NMAX], val[NMAX];
vector<int> vec[NMAX];

int dfs(int cnt, int tat)
{
    int sum = val[cnt];
    for(auto son : vec[cnt])
    {
        if(son == tat)
            continue;
        int ret = dfs(son, cnt);
        if(ret > 0) sum += ret;
    }

    dp[cnt] = sum;

    return sum;
}

int main()
{
    int n; cin >> n;
    for(int i = 1; i <= n; i++)
        cin >> val[i];

    for(int i = 0; i < n - 1; i++)
    {
        int x, y; cin >> x >> y;
        vec[x].push_back(y);
        vec[y].push_back(x);
    }

    int root = 0;
    for(int i = 1; i <= n; i++)
        if(vec[i].size() == 1)
            root = i;

    dfs(root, 0);

    int bestGraph = -1e9;
    for(int i = 1; i <= n; i++)
        bestGraph = max(bestGraph, dp[i]);

    cout << bestGraph << endl;
}