You are given n languages numbered from 1 to n, and for each user, a list of languages they know. Some pairs of users are friends but might not share a common language. You can teach one language to some users so that all friends can communicate. Return the minimum number of users you need to teach.
1 <= n <= 5001 <= languages.length <= 5001 <= languages[i].length <= 101 <= languages[i][j] <= n1 <= friendships.length <= 10001 <= friendships[i][j] <= languages.lengthWhy this approach works:
Alternative approaches considered:
Example Input: n = 3, languages = [[1,2],[2,3],[1,3]], friendships = [[1,2],[2,3]]
Step-by-step execution:
Final Answer = 2
import java.util.*;
class Solution {
    public int minimumTeachings(int n, int[][] languages, int[][] friendships) {
        // Map user to their known languages
        HashMap<Integer, Set<Integer>> userLanguage = new HashMap<>();
        for (int i = 0; i < languages.length; i++) {
            HashSet<Integer> set = new HashSet<>();
            for (int lang : languages[i]) {
                set.add(lang);
            }
            userLanguage.put(i + 1, set);  // User IDs are 1-based
        }
        // Find problematic friendships
        HashSet<Integer> uniqueProblematicUsers = new HashSet<>();
        for (int[] pair : friendships) {
            Set<Integer> firstUserLangs = userLanguage.get(pair[0]);
            Set<Integer> secondUserLangs = userLanguage.get(pair[1]);
            boolean hasCommonLang = firstUserLangs.stream().anyMatch(secondUserLangs::contains);
            if (!hasCommonLang) {
                uniqueProblematicUsers.add(pair[0]);
                uniqueProblematicUsers.add(pair[1]);
            }
        }
        // Try every language and compute minimum teaching effort
        int minToTeach = Integer.MAX_VALUE;
        for (int lang = 1; lang <= n; lang++) {
            int teachCount = 0;
            for (int user : uniqueProblematicUsers) {
                Set<Integer> knownLanguages = userLanguage.get(user);
                if (!knownLanguages.contains(lang)) {
                    teachCount++;
                }
            }
            minToTeach = Math.min(minToTeach, teachCount);
        }
        return minToTeach;
    }
}