fork download
  1. import java.util.*;
  2.  
  3. public class Main {
  4. static long[] sum;
  5. static int[] b;
  6.  
  7. public static void DFS(int node, int parent, List<Integer>[] G) {
  8.  
  9. long bestChild = 0;
  10.  
  11. for (int child : G[node]) {
  12.  
  13. if (child == parent) {
  14. continue;
  15. }
  16.  
  17. DFS(child, node, G);
  18.  
  19. bestChild = Math.max(bestChild, sum[child]);
  20. }
  21.  
  22. sum[node] = b[node] + bestChild;
  23. }
  24.  
  25. public static void main(String[] args) {
  26. Scanner scanner = new Scanner(System.in);
  27.  
  28. int n = scanner.nextInt();
  29.  
  30. b = new int[n + 1];
  31. sum = new long[n + 1];
  32.  
  33. for (int i = 1; i <= n; i++) {
  34. b[i] = scanner.nextInt();
  35. }
  36.  
  37. List<Integer>[] G = new List[n + 1];
  38.  
  39. for (int i = 0; i <= n; i++) {
  40. G[i] = new ArrayList<>();
  41. }
  42.  
  43. for (int i = 1; i <= n - 1; i++) {
  44. int u = scanner.nextInt();
  45. int v = scanner.nextInt();
  46.  
  47. G[u].add(v);
  48. G[v].add(u);
  49. }
  50.  
  51. DFS(1, 0, G);
  52.  
  53. long answer = Long.MIN_VALUE;
  54.  
  55. for (int i = 1; i <= n; i++) {
  56. answer = Math.max(answer, sum[i]);
  57. }
  58.  
  59. System.out.println(answer);
  60. }
  61. }
Success #stdin #stdout 0.11s 56544KB
stdin
7
10 5 -20 7 3 8 -2
1 2
1 3
2 4
2 5
3 6
6 7
stdout
22