saurav_kalsoor

Count Coins - KOTLIN

Jul 18th, 2022 (edited)
992
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Author : Saurav Kalsoor
  2. // Count Coins - KOTLIN
  3.  
  4. import java.util.*;
  5.  
  6. var sc = Scanner(System.`in`)
  7.  
  8. class Edge(var u: Int, var v: Int)
  9.  
  10. fun main() {
  11.     val n = sc.nextInt()
  12.     val m = sc.nextInt()
  13.     val coins = ArrayList<Int>()
  14.     for (i in 0 until n) {
  15.         coins.add(sc.nextInt())
  16.     }
  17.     val arr: ArrayList<Edge> = ArrayList<Edge>()
  18.     for (i in 0 until m) {
  19.         val u = sc.nextInt()
  20.         val v = sc.nextInt()
  21.         arr.add(Edge(u, v))
  22.     }
  23.     println(coinsCount(arr, coins, n))
  24. }
  25.  
  26. fun coinsCount(arr: ArrayList<Edge>, coins: ArrayList<Int>, n: Int): Int {
  27.     val tree = ArrayList<ArrayList<Int>>()
  28.     for (i in 0 until n) tree.add(ArrayList())
  29.     for (e in arr) {
  30.         tree[e.u].add(e.v)
  31.         tree[e.v].add(e.u)
  32.     }
  33.     val mp = HashMap<Int, Int>()
  34.     return uniqueCount(tree, mp, coins, 0, -1)
  35. }
  36.  
  37. fun uniqueCount(
  38.     tree: ArrayList<ArrayList<Int>>,
  39.     mp: HashMap<Int, Int>,
  40.     coins: ArrayList<Int>,
  41.     node: Int,
  42.     parent: Int
  43. ): Int {
  44.     var res = 0
  45.     mp[coins[node]] = mp.getOrDefault(coins[node], 0) + 1
  46.     for (child in tree[node]) {
  47.         if (child == parent) continue
  48.         res = Math.max(res, uniqueCount(tree, mp, coins, child, node))
  49.     }
  50.     res = Math.max(res, mp.size)
  51.     mp[coins[node]] = mp[coins[node]]!! - 1
  52.     if (mp[coins[node]] == 0) mp.remove(coins[node])
  53.     return res
  54. }
  55.  
Add Comment
Please, Sign In to add comment