Cod sursa(job #775972)

Utilizator visanrVisan Radu visanr Data 9 august 2012 15:13:56
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;

#define nmax 16010
#define pb push_back

vector<int> G[nmax];
int C[nmax], N, A, B, maxim, Used[nmax];

int dfs(int startNode)
{
    int sum = C[startNode], x, i;
    for(i = 0; i < G[startNode].size(); i++)
    {
          if(!Used[G[startNode][i]])
          {
                   Used[G[startNode][i]] = 1;
                   x = dfs(G[startNode][i]);
                   if(x > 0) sum += x;
          }
    }
    maxim = max(maxim, sum);
    return sum;
}


int main()
{
    freopen("asmax.in", "r", stdin);
    freopen("asmax.out", "w", stdout);
    int i, j;
    scanf("%i", &N);
    for(i = 1; i <= N; i++) scanf("%i", &C[i]);
    for(i = 1; i < N; i++) scanf("%i %i", &A, &B), G[A].pb(B), G[B].pb(A);
    Used[1] = 1;
    maxim = -10000;
    int x = dfs(1);
    printf("%i\n", maxim);
    scanf("%i", &i);
    return 0;
}