Language: C++

#include <bits/stdc++.h>

using namespace std;

const int N = 111111;
vector<int> a[N];
long long cnt[N];

int dfs(int v, int p = -1) {
if (a[v].size() == 1) {
return cnt[v];
}
long long mx = 0;
long long sum = 0;
for (int x : a[v]) { if (x == p) continue; int mn = dfs(x, v); mx = max(mx, mn); sum += mn; }
int num_sm = (sum - max(sum % 2, 2 * mx - sum)) / 2;
if (sum - num_sm <= cnt[v] && sum >= cnt[v]) return sum - 2 * (sum - cnt[v]); else {
puts("NO");
exit(0);
}
}

int main() { int n; cin >> n; for (int i = 0; i < n; ++i) cin >> cnt[i];
for (int i = 0; i < n - 1; ++i) { int u, v; cin >> u >> v; --u, --v; a[u].push_back(v); a[v].push_back(u); }
int root = 0;
if (n == 2) {
if (cnt[0] == cnt[1]) puts("YES"); else puts("NO"); return 0;
}
while (a[root].size() == 1) ++root;
if (dfs(root)) puts("NO"); else puts("YES"); return 0;
}

Compiler output:
a.cc: In function 'int dfs(int, int)':
a.cc:15:72: error: no matching function for call to 'max(long long int&, int&)'
   15 | for (int x : a[v]) { if (x == p) continue; int mn = dfs(x, v); mx = max(mx, mn); sum += mn; }
      |                                                                     ~~~^~~~~~~~
In file included from /usr/include/c++/14/algorithm:60,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:51,
                 from a.cc:1:
/usr/include/c++/14/bits/stl_algobase.h:257:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)'
  257 |     max(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:257:5: note:   template argument deduction/substitution failed:
a.cc:15:72: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'int')
   15 | for (int x : a[v]) { if (x == p) continue; int mn = dfs(x, v); mx = max(mx, mn); sum += mn; }
      |                                                                     ~~~^~~~~~~~
/usr/include/c++/14/bits/stl_algobase.h:303:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)'
  303 |     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:303:5: note:   candidate expects 3 arguments, 2 provided
In file included from /usr/include/c++/14/algorithm:61:
/usr/include/c++/14/bits/stl_algo.h:5706:5: note: candidate: 'template<class _Tp> constexpr _Tp std::max(initializer_list<_Tp>)'
 5706 |     max(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5706:5: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/14/bits/stl_algo.h:5716:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::max(initializer_list<_Tp>, _Compare)'
 5716 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5716:5: note:   template argument deduction/substitution failed:
a.cc:15:72: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   15 | for (int x : a[v]) { if (x == p) continue; int mn = dfs(x, v); mx = max(mx, mn); sum += mn; }
      |                                                                     ~~~^~~~~~~~