5.Possible Bipartition
Bipartite Graph Check
Last updated
Bipartite Graph Check
Last updated
Example 1:
Input: N = 4, dislikes = [[1,2],[1,3],[2,4]]
Output: true
Explanation: group1 [1,4], 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: falseclass Solution
{
public:
bool checkBipartite(int itr, vector<int> v[], vector<bool> &vs, vector<int> &col)
{
queue<int> q;
q.push(itr);
vs[itr] = 1;
col[itr] = 1;
while (!q.empty())
{
int node = q.front();
int colr = col[node];
q.pop();
for (int i = 0; i < v[node].size(); i++)
{
if (vs[v[node][i]] == 0)
{
q.push(v[node][i]);
vs[v[node][i]] = 1;
col[v[node][i]] = 1 - colr;
}
else
{
if (col[v[node][i]] == colr)
{
return false;
}
}
}
}
return true;
}
bool possibleBipartition(int n, vector<vector<int>> &dislikes)
{
vector<int> v[n + 1];
vector<bool> vs(n + 1);
vector<int> col(n + 1, -1);
for (int i = 0; i < dislikes.size(); i++)
{
v[dislikes[i][0]].push_back(dislikes[i][1]);
v[dislikes[i][1]].push_back(dislikes[i][0]);
}
for (int i = 1; i <= n; i++)
{
if (vs[i] == 0)
{
if (!checkBipartite(i, v, vs, col))
{
return false;
}
}
}
return true;
}
};