Cod sursa(job #215288)

Utilizator savimSerban Andrei Stan savim Data 18 octombrie 2008 12:33:27
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#include <vector>

using namespace std;

#define MAX_N 16010

int n,i,j,k,p,q,maxim = -2147000000;
int cost[MAX_N],fol[MAX_N];
vector <int> nod[MAX_N];

int dfs(int p) { 
    int i = 0, k = nod[p].size(), x, sum = 0;
    
    fol[p] = 1;
    for (i = 0; i < k; i++) {
       x = 0;
       if (!fol[nod[p][i]]) x = dfs(nod[p][i]);
       if (x > 0) sum += x;
    }
    
    if (cost[p] + sum > maxim) maxim = cost[p] + sum;
    return cost[p] + sum;
}

int main() {

    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);
    
    scanf("%d",&n);
    for (i = 1; i <= n; i++) {
        scanf("%d",&cost[i]);
        if (cost[i] > maxim) maxim = cost[i];
    }
        
    for (i = 1; i <= n - 1; i++) {
        scanf("%d %d",&p,&q);
        nod[p].push_back(q);
        nod[q].push_back(p);
    }    

    k = dfs(1);
    printf("%d\n",maxim);
    
    return 0;
}