fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5. ios::sync_with_stdio(0);
  6. cin.tie(0);
  7. int n;
  8. cin >> n;
  9. vector<int> r(n + 1);
  10. for (int i = 1; i <= n; i++) {
  11. cin >> r[i];
  12. }
  13. vector<vector<int>> g(n + 1);
  14. for (int i = 0; i < n - 1; i++) {
  15. int a, b;
  16. cin >> a >> b;
  17. g[a].push_back(b);
  18. g[b].push_back(a);
  19. }
  20. vector<long long> dp(n + 1, 0);
  21. vector<int> p(n + 1, -1);
  22. queue<int> q;
  23. q.push(1);
  24. p[1] = 0;
  25. dp[1] = r[1];
  26. long long wynik = 0;
  27. while (!q.empty()) {
  28. int v = q.front();
  29. q.pop();
  30. bool lisc = true;
  31. for (int u : g[v]) {
  32. if (u == p[v]) continue;
  33. lisc = false;
  34. p[u] = v;
  35. dp[u] = dp[v] + r[u];
  36. q.push(u);
  37. }
  38. if (lisc) {
  39. wynik = max(wynik, dp[v]);
  40. }
  41. }
  42. cout << wynik;
  43. }
Success #stdin #stdout 0s 5320KB
stdin
6
5 0 4 2 1 3
1 2
6 1
2 3
5 4
2 5
stdout
9