Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Author : Saurav Kalsoor
- // Count Coins - KOTLIN
- import java.util.*;
- var sc = Scanner(System.`in`)
- class Edge(var u: Int, var v: Int)
- fun main() {
- val n = sc.nextInt()
- val m = sc.nextInt()
- val coins = ArrayList<Int>()
- for (i in 0 until n) {
- coins.add(sc.nextInt())
- }
- val arr: ArrayList<Edge> = ArrayList<Edge>()
- for (i in 0 until m) {
- val u = sc.nextInt()
- val v = sc.nextInt()
- arr.add(Edge(u, v))
- }
- println(coinsCount(arr, coins, n))
- }
- fun coinsCount(arr: ArrayList<Edge>, coins: ArrayList<Int>, n: Int): Int {
- val tree = ArrayList<ArrayList<Int>>()
- for (i in 0 until n) tree.add(ArrayList())
- for (e in arr) {
- tree[e.u].add(e.v)
- tree[e.v].add(e.u)
- }
- val mp = HashMap<Int, Int>()
- return uniqueCount(tree, mp, coins, 0, -1)
- }
- fun uniqueCount(
- tree: ArrayList<ArrayList<Int>>,
- mp: HashMap<Int, Int>,
- coins: ArrayList<Int>,
- node: Int,
- parent: Int
- ): Int {
- var res = 0
- mp[coins[node]] = mp.getOrDefault(coins[node], 0) + 1
- for (child in tree[node]) {
- if (child == parent) continue
- res = Math.max(res, uniqueCount(tree, mp, coins, child, node))
- }
- res = Math.max(res, mp.size)
- mp[coins[node]] = mp[coins[node]]!! - 1
- if (mp[coins[node]] == 0) mp.remove(coins[node])
- return res
- }
Add Comment
Please, Sign In to add comment