Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Author : Saurav Kalsoor
- // Count Coins- JAVA
- import java.util.*;
- public class Test {
- static Scanner sc = new Scanner(System.in);
- public static void main(String[] args) {
- int n = sc.nextInt();
- int m = sc.nextInt();
- ArrayList<Integer> coins = new ArrayList<>();
- for(int i =0; i < n; i++){
- coins.add(sc.nextInt());
- }
- ArrayList<Edge> arr = new ArrayList<>();
- for(int i=0; i < m; i++){
- int u = sc.nextInt();
- int v = sc.nextInt();
- arr.add(new Edge(u, v));
- }
- System.out.println(coinsCount(arr, coins, n));
- }
- public static int coinsCount(ArrayList<Edge> arr, ArrayList<Integer> coins, int n) {
- ArrayList<ArrayList<Integer>> tree = new ArrayList<>();
- for(int i = 0; i < n; i++) tree.add(new ArrayList<>());
- for(Edge e : arr){
- tree.get(e.u).add(e.v);
- tree.get(e.v).add(e.u);
- }
- HashMap<Integer, Integer> mp = new HashMap<>();
- return uniqueCount(tree, mp, coins, 0, -1);
- }
- public static int uniqueCount(ArrayList<ArrayList<Integer>> tree, HashMap<Integer, Integer> mp, ArrayList<Integer> coins, int node, int parent){
- int res = 0;
- mp.put(coins.get(node), mp.getOrDefault(coins.get(node), 0) + 1);
- for(int child : tree.get(node)){
- if(child == parent) continue;
- res = Math.max(res, uniqueCount(tree, mp, coins, child, node));
- }
- res = Math.max(res, mp.size());
- mp.put(coins.get(node), mp.get(coins.get(node)) - 1);
- if(mp.get(coins.get(node)) == 0)
- mp.remove(coins.get(node));
- return res;
- }
- }
- class Edge{
- int u, v;
- Edge(int u, int v){
- this.u = u;
- this.v = v;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement