Cod sursa(job #1888824)

Utilizator mirunazMiruna Zavelca mirunaz Data 22 februarie 2017 12:52:36
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cstdio>
#include <vector>
#include <bitset>
using namespace std;

#define N 16001

long long s = -1000, v[N], sum[N];
int a, b, n;
vector <int> vec[N];
bitset <N> viz;

void dfs (int nod)
{
    viz[nod] = true;
    sum[nod] = v[nod];

    for (int i=0; i<vec[nod].size(); i++){
        int now = vec[nod][i];
        if (viz[now] == false){
            dfs (now);
            if (sum[now] > 0){
                sum[nod] += sum[now];
            }
        }
    }

    if (sum[nod] > s){
        s = sum[nod];
    }
}

int main ()
{
    freopen ("asmax.in", "r", stdin);
    freopen ("asmax.out", "w", stdout);

    scanf ("%d", &n);

    for (int i=1; i<=n; i++){
        scanf ("%lld", &v[i]);
    }

    for (int i=1; i<n; i++){
        scanf ("%d %d", &a, &b);
        vec[a].push_back (b);
        vec[b].push_back (a);
    }

    for (int i=1; i<=n; i++){
        if (viz[i] == false){
            dfs (i);
        }
    }

    printf ("%lld", s);

    return 0;
}