Cod sursa(job #2050456)

Utilizator B_RazvanBaboiu Razvan B_Razvan Data 28 octombrie 2017 09:58:03
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <cstdio>
#include <vector>
#define NMAX 16005

using namespace std;

int n, v[NMAX], viz[NMAX], suma[NMAX], start = 1;
vector <int> g[NMAX];

void read()
{
    scanf("%d", &n);
    for(int i=1; i<=n; ++i)
        {
            scanf("%d", &v[i]);
        }
    for(int i=1; i<=n-1; ++i)
    {
        int x, y;
        scanf("%d%d", &x, &y);
        g[x].push_back(y);
        g[y].push_back(x);
    }
}

int dfs(int node)
{
    vector <int>::iterator it;
    viz[node] = 1;
    for(it = g[node].begin(); it != g[node].end(); ++it)
        if(viz[*it] == 0)
        {
            suma[node] += dfs(*it);
        }
    suma[node] += v[node];
    if(suma[node] > 0)
        return suma[node];
    return 0;
}

int main()
{
    freopen("asmax.in", "r", stdin);
    freopen("asmax.out", "w", stdout);
    read();
    dfs(1);
    for(int i=1; i<=n; ++i)
        suma[1] = max(suma[1], suma[i]);
    printf("%d", suma[1]);
    return 0;
}