Cod sursa(job #1971493)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 20 aprilie 2017 14:45:21
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>
#include <vector>

const int MAXN = 1e4 + 6e3;

std::vector <int> g[MAXN + 1];
int cost[MAXN + 1], dp[MAXN + 1];
bool r[MAXN + 1];

void dfs(int u) {
  r[u] = 1;
  dp[u] = cost[u];
  for (int i = 0; i < g[u].size(); ++i) {
    if (!r[g[u][i]]) {
      dfs(g[u][i]);
      if (dp[g[u][i]] > 0) {
        dp[u] += dp[g[u][i]];
      }
    }
  }
}

int main() {
  int n, sol;
  FILE *f = fopen("asmax.in", "r");
  fscanf(f, "%d", &n);
  for (int i = 1; i <= n; ++i) {
    fscanf(f, "%d", cost + i);
  }
  for (int x, y, i = 0; i < n - 1; ++i) {
    fscanf(f, "%d%d", &x, &y);
    g[x].push_back(y);
    g[y].push_back(x);
  }
  fclose(f);
  dfs(1);
  sol = dp[1];
  for (int i = 2; i <= n; ++i) {
    if (dp[i] > sol) {
      sol = dp[i];
    }
  }
  f = fopen("asmax.out", "w");
  fprintf(f, "%d\n", sol);
  fclose(f);
  return 0;
}