Cod sursa(job #833920)

Utilizator sebii_cSebastian Claici sebii_c Data 13 decembrie 2012 13:42:35
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include <cstring>

#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>

using namespace std;

const int MAXN = 16001;

int n;
vector<int> G[MAXN];
int cost[MAXN];
bool viz[MAXN];
long sum[MAXN];

void max_sum(int node) 
{
    viz[node] = true;
    sum[node] = cost[node];
    
    vector<int>::iterator neigh;
    for (neigh = G[node].begin(); neigh != G[node].end(); ++neigh) {
        if (viz[*neigh]) continue;
        max_sum(*neigh);
        sum[node] = max(sum[node], sum[node] + sum[*neigh]);
    }
}

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

    scanf("%d", &n);
    for (int i = 1; i <= n; ++i) 
        scanf("%d", &cost[i]);
    int max_in = 0;
    vector<int> poss;
    for (int i = 0; i < n - 1; ++i) {
        int x, y; scanf("%d %d", &x, &y);
        G[x].push_back(y);
        G[y].push_back(x);
    }
    max_sum(1);
    printf("%ld\n", *max_element(sum + 1, sum + n + 1));

    return 0;
}