This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub kmyk/competitive-programming-library
/**
* @note g must be connected
* @return is the size of a part
*/
int check_bipartite_graph(vector<vector<int> > const & g) {
int n = g.size();
vector<char> used(n, -1);
function<bool (int, int)> dfs = [&](int i, int parent) {
for (int j : g[i]) {
if (used[j] != -1) {
if (used[j] == used[i]) {
return false;
}
} else {
used[j] = used[i] ^ 1;
if (not dfs(j, i)) return false;
}
}
return true;
};
used[0] = 0;
if (not dfs(0, -1)) return -1;
return count(whole(used), 0);
}
#line 1 "old/bipartite-graph.inc.cpp"
/**
* @note g must be connected
* @return is the size of a part
*/
int check_bipartite_graph(vector<vector<int> > const & g) {
int n = g.size();
vector<char> used(n, -1);
function<bool (int, int)> dfs = [&](int i, int parent) {
for (int j : g[i]) {
if (used[j] != -1) {
if (used[j] == used[i]) {
return false;
}
} else {
used[j] = used[i] ^ 1;
if (not dfs(j, i)) return false;
}
}
return true;
};
used[0] = 0;
if (not dfs(0, -1)) return -1;
return count(whole(used), 0);
}