fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. long long sum[500000 + 5];
  5. long long b[500000 + 5];
  6.  
  7. void DFS(long long node, vector<long long> G[], long long used[], long long parent[]) {
  8. used[node] = 1;
  9.  
  10. for (long long neighbour : G[node]) {
  11. if (used[neighbour] == 0) {
  12. parent[neighbour] = node;
  13. DFS(neighbour, G, used, parent);
  14. }
  15. }
  16.  
  17. long long best = 0;
  18.  
  19. for (long long child : G[node]) {
  20. if (child != parent[node]) {
  21. best = max(best, sum[child]);
  22. }
  23. }
  24.  
  25. sum[node] = b[node] + best;
  26. }
  27.  
  28. int main() {
  29. long long n;
  30. cin >> n;
  31.  
  32. vector<long long> G[n + 1];
  33.  
  34. for (long long i = 1; i <= n; i++) {
  35. cin >> b[i];
  36. }
  37.  
  38. for (long long i = 1; i <= n - 1; i++) {
  39. long long u, v;
  40. cin >> u >> v;
  41.  
  42. G[u].push_back(v);
  43. G[v].push_back(u);
  44. }
  45.  
  46. long long used[n + 1] = {};
  47. long long parent[n + 1] = {};
  48.  
  49. DFS(1, G, used, parent);
  50.  
  51. long long answer = -1000000000000000LL;
  52.  
  53. for (long long i = 1; i <= n; i++) {
  54. answer = max(answer, sum[i]);
  55. }
  56.  
  57. cout << answer;
  58.  
  59. return 0;
  60. }
Success #stdin #stdout 0.01s 5548KB
stdin
Standard input is empty
stdout
Standard output is empty