Advertisement
saurav_kalsoor

Count Coins - JAVA

Jul 25th, 2022
848
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.84 KB | None | 0 0
  1. // Author : Saurav Kalsoor
  2. // Count Coins- JAVA
  3.  
  4. import java.util.*;
  5.  
  6. public class Test {
  7.     static Scanner sc = new Scanner(System.in);
  8.     public static void main(String[] args) {
  9.  
  10.         int n = sc.nextInt();
  11.         int m = sc.nextInt();
  12.  
  13.         ArrayList<Integer> coins = new ArrayList<>();
  14.         for(int i =0; i < n; i++){
  15.             coins.add(sc.nextInt());
  16.         }
  17.        
  18.         ArrayList<Edge> arr = new ArrayList<>();
  19.         for(int i=0; i < m; i++){
  20.             int u = sc.nextInt();
  21.             int v = sc.nextInt();
  22.  
  23.             arr.add(new Edge(u, v));
  24.         }
  25.  
  26.         System.out.println(coinsCount(arr, coins, n));
  27.     }
  28.  
  29.     public static int coinsCount(ArrayList<Edge> arr, ArrayList<Integer> coins, int n) {
  30.         ArrayList<ArrayList<Integer>> tree = new ArrayList<>();
  31.         for(int i = 0; i < n; i++) tree.add(new ArrayList<>());
  32.         for(Edge e : arr){
  33.             tree.get(e.u).add(e.v);
  34.             tree.get(e.v).add(e.u);
  35.         }
  36.         HashMap<Integer, Integer> mp = new HashMap<>();
  37.         return uniqueCount(tree, mp, coins, 0, -1);
  38.     }
  39.  
  40.     public static int uniqueCount(ArrayList<ArrayList<Integer>> tree, HashMap<Integer, Integer> mp, ArrayList<Integer> coins, int node, int parent){
  41.        
  42.         int res = 0;
  43.         mp.put(coins.get(node), mp.getOrDefault(coins.get(node), 0) + 1);
  44.         for(int child : tree.get(node)){
  45.             if(child == parent) continue;
  46.  
  47.             res = Math.max(res, uniqueCount(tree, mp, coins, child, node));
  48.         }
  49.  
  50.         res = Math.max(res, mp.size());
  51.         mp.put(coins.get(node), mp.get(coins.get(node)) - 1);
  52.         if(mp.get(coins.get(node)) == 0)
  53.             mp.remove(coins.get(node));
  54.         return res;
  55.     }
  56.    
  57. }
  58.  
  59. class Edge{
  60.     int u, v;
  61.     Edge(int u, int v){
  62.         this.u = u;
  63.         this.v = v;
  64.     }
  65. }
  66.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement