2022-12-21 Daily Challenge

Today I have done leetcode's December LeetCoding Challenge with cpp.

December LeetCoding Challenge 21

Description

Possible Bipartition

We want to split a group of n people (labeled from 1 to n) into two groups of any size. Each person may dislike some other people, and they should not go into the same group.

Given the integer n and the array dislikes where dislikes[i] = [ai, bi] indicates that the person labeled ai does not like the person labeled bi, return true if it is possible to split everyone into two groups in this way.

 

Example 1:

Input: n = 4, dislikes = [[1,2],[1,3],[2,4]]
Output: true
Explanation: group1 [1,4] and group2 [2,3].

Example 2:

Input: n = 3, dislikes = [[1,2],[1,3],[2,3]]
Output: false

Example 3:

Input: n = 5, dislikes = [[1,2],[2,3],[3,4],[4,5],[1,5]]
Output: false

 

Constraints:

  • 1 <= n <= 2000
  • 0 <= dislikes.length <= 104
  • dislikes[i].length == 2
  • 1 <= dislikes[i][j] <= n
  • ai < bi
  • All the pairs of dislikes are unique.

Solution

class Solution {
  vector<vector<int>> dislike;
public:
  bool possibleBipartition(int N, vector<vector<int>>& dislikePairs) {
    dislike.resize(N+1);
    
    for(auto &pair : dislikePairs) {
      dislike[pair[0]].push_back(pair[1]);
      dislike[pair[1]].push_back(pair[0]);
    }
    
    vector<int> group(N+1, -1);
    while(true) {
      queue<int> q;
      for(int i = 1; i <= N; ++i) {
        if(group[i] == -1) {
          q.push(i);
          group[i] = 0;
          break;
        }
      }
      if(q.empty()) break;
      while(!q.empty()) {
        int current = q.front();
        q.pop();
        for(auto dis : dislike[current]) {
          if(group[dis] != -1 && group[dis] == group[current]) return false;
          if(group[dis] == -1) q.push(dis);
          group[dis] = group[current] ^ 1;
        }
      }
    }
    return true;
  }
};

// Accepted
// 70/70 cases passed (472 ms)
// Your runtime beats 40.43 % of cpp submissions
// Your memory usage beats 75.45 % of cpp submissions (64.7 MB)