Cod sursa(job #3198549)

Utilizator StefannnnnStefan Stefannnnn Data 29 ianuarie 2024 19:24:22
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I, Semestrul 2 Marime 0.9 kb
#include <bits/stdc++.h>
#define int long long

using namespace std;

const int nmax = 69696;

int dp[nmax][2], v[nmax];

vector<vector<int>> adj;

void dfs(int i, int tata) {
  int sum = 0, maxx = -1e9;
  for(auto it : adj[i]) {
    if(it != tata) {
      dfs(it, i);
      if(dp[it][1] > 0) {
        sum += dp[it][1];
      }
      maxx = max(maxx, dp[it][0]);
    }
  }
  dp[i][1] = max(dp[i][1], sum + v[i]);
  dp[i][0] = max(maxx, dp[i][1]);
  //cout << i << " " << sum << " " << v[i] << '\n';
}

int32_t main() {
  ifstream cin("asmax.in");
  ofstream cout("asmax.out");
  int n;
  cin >> n;
  adj.resize(n + 1);
  for(int i = 1; i <= n; i ++) {
    cin >> v[i];
    dp[i][0] = dp[i][1] = -1e9;
  }
  for(int i = 1; i < n; i ++) {
    int a, b;
    cin >> a >> b;
    adj[a].push_back(b);
    adj[b].push_back(a);
  }
  dfs(1, 0);
  cout << dp[1][0];
  return 0;
}