• + 1 comment

    Some of my test cases are failing due to Wrong Answer. Could anyone please let me know where I am going wrong

    `

    static Integer findParent(int node, List parent){ if(node == parent.get(node)){ return node; }

        return parent.set(parent.get(node), findParent(parent.get(node), parent));
    }
    
    static void union(int u, int v, List<Integer> parent, List<Integer> rank){
        int pu = findParent(u, parent);
        int pv = findParent(v, parent);
    
        if(rank.get(pu) > rank.get(pv)) {
            parent.set(pv, pu);
        }else if(rank.get(pu) < rank.get(pv)) {
            parent.set(pu, pv);
        }else {
            parent.set(pv, pu);
            rank.set(pu, rank.get(pu) + 1);
        }
    }
    
    public static long roadsAndLibraries(int n, int c_lib, int c_road, List<List<Integer>> cities) {
    
        List<Integer> parent = new ArrayList<>();
        List<Integer> rank = new ArrayList<>();
        HashMap<Integer, Integer> freqMap = new HashMap<>();
        long result = 0;
    
        for(int i = 0; i <= n; i++){
            parent.add(i);
            rank.add(0);
        }
    
        for(int i = 0; i< cities.size(); i++){
            int u = cities.get(i).get(0);
            int v = cities.get(i).get(1);
            union(u, v, parent, rank);
        }
    
        for(int i = 1; i <= n; i++){
            Integer fp = findParent(i, parent);
            freqMap.put(fp, freqMap.getOrDefault(fp, 0) + 1);
        }
    
        for(Integer val: freqMap.values()){
            result += Math.min((long)val * c_lib, ((long)(val - 1) * c_road) + c_lib);
        }
    
        return result;
    }
    

    }`