Cod sursa(job #645232)

Utilizator Smaug-Andrei C. Smaug- Data 8 decembrie 2011 21:12:20
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <cstdio>
#include <vector>
using namespace std;

#define MAXN 16010
#define LOW -(1<<30)

int N, maxs, V[MAXN], D[MAXN];
vector<int> G[MAXN];

void dfs(int n, int prev){
  
  D[n]=V[n];

  for(vector<int>::iterator ii=G[n].begin(); ii!=G[n].end(); ii++)
    if(*ii != prev){
      dfs(*ii, n);
      if(D[*ii] > 0)
	D[n]+=D[*ii];
    }

  if(D[n] > maxs)
    maxs=D[n];

}

int main(){

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

  int i, a, b;

  scanf("%d", &N);
  for(i=1; i<=N; i++)
    scanf("%d", V+i);

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

  maxs=LOW;
  dfs(1, 0);

  printf("%d\n", maxs);

  return 0;

}