Advertisement
yimengael

Friendly Groups

Mar 7th, 2022
837
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.72 KB | None | 0 0
  1.  
  2.     static Boolean can_be_divided(Integer num_of_people, ArrayList<Integer> dislike1, ArrayList<Integer> dislike2) {
  3.         //Build the graph
  4.         Map<Integer, ArrayList<Integer>> adj_list = new HashMap<>();
  5.         for (int node = 0; node < num_of_people; node++) {
  6.             adj_list.put(node, new ArrayList<Integer>());
  7.         }
  8.         for (int i = 0; i < dislike1.size(); i++) {
  9.             adj_list.get(dislike1.get(i)).add(dislike2.get(i));
  10.             adj_list.get(dislike2.get(i)).add(dislike1.get(i));
  11.         }
  12.        
  13.         int[] visited = new int[num_of_people];
  14.         int[] subset = new int[num_of_people];
  15.         for (int node = 0; node < num_of_people; node++) {
  16.             if (visited[node] == 0) {
  17.                 subset[node] = 0;
  18.                 if (!dfs(node, visited, subset, adj_list)) {
  19.                     return false;
  20.                 }
  21.             }
  22.         }
  23.        
  24.         return true;
  25.     }
  26.    
  27.     static Boolean dfs(int node, int[] visited, int[] subset, Map<Integer, ArrayList<Integer>> adj_list) {
  28.         visited[node] = 1;
  29.        
  30.         for (int neighbor : adj_list.get(node)) {
  31.             if (visited[neighbor] == 0) {
  32.                 //assign the opposite subset
  33.                 subset[neighbor] = 1 - subset[node];
  34.                
  35.                 if (!dfs(neighbor, visited, subset, adj_list)) {
  36.                     return false;
  37.                 }
  38.             } else {
  39.                 //if we have seen this node before,
  40.                 //is it in the same subset, if so, return false
  41.                 if (subset[node] == subset[neighbor]) {
  42.                     return false;
  43.                 }
  44.             }
  45.         }
  46.        
  47.         return true;
  48.     }
  49.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement