Cod sursa(job #3165726)

Utilizator andreic06Andrei Calota andreic06 Data 6 noiembrie 2023 20:08:03
Problema Asmax Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in ("asmax.in");
ofstream out ("asmax.out");

using int64 = long long;
const int N_MAX = 10e3;

int value[1 + N_MAX], dp[1 + N_MAX];
vector<int> tree[1 + N_MAX];

const int myINF = 1e9;
void getDP (int root, int p) {
   for (int node : tree[root])
      if (node != p)
        getDP (node, root);


   dp[root] = value[root];
   for (int node : tree[root])
      if (node != p)
        dp[root] = max (dp[root], dp[root] + dp[node]);
}

int main()
{
   int n; in >> n;
   for (int node = 1; node <= n; node ++)
      in >> value[node];
   for (int i = 1; i < n; i ++) {
      int a, b; in >> a >> b;
      tree[a].push_back (b);
      tree[b].push_back (a);
   }
   getDP (1, 0);
   int maxDP = -myINF;
   for (int node = 1; node <= n; node ++)
      maxDP = max (maxDP, dp[node]);
   out << maxDP;
    return 0;
}