Cod sursa(job #2667357)

Utilizator cristi_macoveiMacovei Cristian cristi_macovei Data 3 noiembrie 2020 13:04:31
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

const int NMAX = 16e3;

int n;
int a[1 + NMAX];
int dp[1 + NMAX];
bool vis[1 + NMAX];

std::vector<int> graf[1 + NMAX];

void read() {
  std::ifstream in("asmax.in");

  in >> n;

  for (int i = 1; i <= n; ++i)
    in >> a[i];

  int x, y;
  while (in >> x >> y) {
    graf[x].push_back(y);
    graf[y].push_back(x);
  }

  in.close();
}

void dfs(int nod) {
  vis[nod] = true;
  dp[nod] = a[nod];

  for (int vecin : graf[nod]) {
    if (!vis[vecin]) {
      dfs(vecin);

      if (dp[vecin] > 0)
        dp[nod] += dp[vecin];
    }
  }
}

int main() {
  read();

  dfs(1);

  int ans = dp[1];

  for (int i = 2; i <= n; ++i)
    ans = std::max(ans, dp[i]);

  std::ofstream out("asmax.out");
  out << ans;

  out.close();
  return 0;
}