fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. static void dfs(int node,List<List<Integer>> adj, int visited[], int parent[], int sum[], int arr[] )
  11. {
  12. visited[node]=1;
  13. for(int ele:adj.get(node))
  14. {
  15. if(visited[ele]==0)
  16. {
  17. parent[ele]=node;
  18. dfs(ele,adj,visited,parent,sum,arr);
  19. }
  20. }
  21.  
  22.  
  23. int val=0;
  24. for(int ele:adj.get(node))
  25. {
  26. if(ele!=parent[node])
  27. {
  28. val+=sum[ele];
  29. }
  30. }
  31. sum[node]=arr[node]+val;
  32. }
  33. public static void main (String[] args) throws java.lang.Exception
  34. {
  35. // your code goes here
  36. Scanner sc=new Scanner(System.in);
  37. int n=sc.nextInt();
  38. List<List<Integer>> adj=new ArrayList<>();
  39. int sum[]=new int[n+1];
  40. int parent[]=new int[n+1];
  41. int visited[]=new int[n+1];
  42.  
  43. for(int i=0;i<=n;i++)
  44. adj.add(new ArrayList<>());
  45.  
  46. int arr[]=new int[n+1];
  47. for(int i=1;i<=n;i++)
  48. arr[i]=sc.nextInt();
  49.  
  50. for(int i=1;i<n;i++)
  51. {
  52. int u=sc.nextInt();
  53. int v=sc.nextInt();
  54. adj.get(u).add(v);
  55. adj.get(v).add(u);
  56.  
  57. }
  58.  
  59.  
  60. dfs(1,adj,visited,parent,sum,arr);
  61.  
  62. System.out.println("the sum for each dubtree till ith node is: ");
  63. int max=-99999;
  64. for(int i=1;i<=n;i++)
  65. {
  66. System.out.print(sum[i]+" ");
  67. max=Math.max(max,sum[i]);
  68. }
  69. System.out.println("max value= "+max);
  70.  
  71. }
  72. }
Success #stdin #stdout 0.23s 60852KB
stdin
5
5 7 -10 4 15 
1 2
2 3 
3 4 
1 5 
stdout
the sum for each dubtree till ith node is: 
21 1 -6 4 15 max value= 21