// AC (recgnizing bipartite graphs by Union Find) #include #include #include bool is_bipartite(const std::vector>& g) { const int n = g.size(); atcoder::dsu uf(2 * n); for (int u = 0; u < n; ++u) for (int v : g[u]) { uf.merge(u, v + n); uf.merge(u + n, v); } for (int v = 0; v < n; ++v) { if (uf.same(v, v + n)) { return false; } } return true; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n, m; std::cin >> n >> m; std::vector> g(n); for (int i = 0; i < m; ++i) { int u, v; std::cin >> u >> v; --u, --v; g[u].push_back(v); g[v].push_back(u); } if (is_bipartite(g)) { std::cout << "Yes" << std::endl; } else { std::cout << "No" << std::endl; } }