Cod sursa(job #2343924)

Utilizator ApostolIlieDanielApostol Daniel ApostolIlieDaniel Data 14 februarie 2019 15:39:28
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <bits/stdc++.h>

using namespace std;
const int MAXN = 16000;
int a[MAXN + 1], sol[MAXN + 1];
vector <int> gr[MAXN + 1];
void dfs (int nod, int tata) {
  sol[nod] = a[nod];
  for (auto fiu : gr[nod]) {
    if (fiu != tata) {
      dfs (fiu, nod);
      sol[nod] += max (0, sol[fiu]);
    }
  }
}

int main() {
  int n, i, x, y, mx;
  freopen ("asmax.in", "r", stdin);
  freopen ("asmax.out", "w", stdout);
  scanf ("%d", &n);
  for (i = 1; i <= n; i++)
    scanf ("%d", &a[i]);
  for (i = 1; i < n; i++) {
    scanf ("%d%d", &x, &y);
    gr[x].push_back (y);
    gr[y].push_back (x);
  }
  dfs (1, -1);
  mx = sol[1];
  for (i = 2; i <= n; i++)
    mx = max (mx, sol[i]);
  printf ("%d\n", mx);
  return 0;
}