Cod sursa(job #1778991)

Utilizator tudorcomanTudor Coman tudorcoman Data 14 octombrie 2016 16:43:02
Problema Asmax Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I, Semestrul 2 Marime 0.85 kb

#include <queue>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

const int maxN = 16384;
int v[maxN];
int d[maxN];
vector<int> G[maxN];

void dfs(int node, int father) {
  for(auto it: G[node])
    if(it != father)
      dfs(it, node);
  for(auto it: G[node])
    if(it != father)
      d[node] = max(d[node], d[node] + d[it]);
}

int main() {
  freopen("asmax.in", "r", stdin);
  freopen("asmax.out", "w", stdout);
  int N, Maxim = 0;
  scanf("%d", &N);

  for(int i = 1; i <= N; ++ i) {
    scanf("%d", &v[i]);
    d[i] = v[i];
  }

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

  dfs(1, 0);
  int Max = -(1 << 30);
  for(int i = 1; i <= N; ++ i)
    Max = max(Max, d[i]);
  printf("%d\n", Max);
  return 0;
}