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.  
  8. /* Name of the class has to be "Main" only if the class is public. */
  9. class Ideone
  10. {
  11.  
  12. static void dfs(int src, List<List<Integer>> adj, int parent[], int depth[],
  13. int dp[], int visited[], int val[]
  14. )
  15. {
  16. visited[src]=1;
  17.  
  18. for(int child:adj.get(src))
  19. {
  20. if(visited[child]==0)
  21. {
  22. parent[child]=src;
  23.  
  24. depth[child]=depth[src]+1;
  25.  
  26.  
  27. dfs(child,adj,parent,depth,dp,visited,val);
  28. }
  29. }
  30.  
  31.  
  32. dp[src]= val[src] ^ depth[src];
  33. for(int ele: adj.get(src))
  34. {
  35. if(ele!=parent[src])
  36. dp[src]+=dp[ele];
  37.  
  38. }
  39. }
  40.  
  41.  
  42.  
  43. public static void main (String[] args) throws java.lang.Exception
  44. {
  45. // your code goes here
  46. Scanner sc=new Scanner(System.in);
  47. int n=sc.nextInt();
  48. List<List<Integer>> adj=new ArrayList<>();
  49.  
  50. for(int i=0;i<=n;i++)
  51. adj.add(new ArrayList<>());
  52.  
  53. //values for nodes
  54. int val[]=new int[n+1];
  55.  
  56. for(int i=1;i<=n;i++)
  57. val[i]=sc.nextInt();
  58.  
  59.  
  60. for(int i=1;i<n;i++)
  61. {
  62. int u=sc.nextInt();
  63. int v=sc.nextInt();
  64. adj.get(u).add(v);
  65. adj.get(v).add(u);
  66. }
  67.  
  68. int visited[]=new int[n+1];
  69. int parent[]=new int[n+1];
  70.  
  71. int depth[]=new int[n+1];
  72.  
  73. int dp[]=new int[n+1];
  74.  
  75. dfs(1,adj,parent,depth,dp,visited,val);
  76.  
  77. for(int i=1;i<=n;i++)
  78. System.out.print(dp[i]+" ");
  79.  
  80.  
  81.  
  82. }
  83. }
Success #stdin #stdout 0.13s 58968KB
stdin
5
1 2 3 4 5 
1 2
2 3
3 4
3 5
stdout
18 17 14 7 6