#include #include #include using namespace std; struct Dsu { vector p; int n; Dsu (int n_) { n = n_; p = vector (n); iota (p.begin (), p.end (), 0); } int root (int v) { if (p[v] == v) return v; return root (p[v]); } bool unite (int u, int v) { u = root (u); v = root (v); if (u == v) return false; p[u] = v; return true; } }; int main () { int n, m; cin >> n >> m; Dsu dsu (n); int res = n; for (int j = 0; j < m; j++) { int u, v; cin >> u >> v; u -= 1; v -= 1; res -= dsu.unite (u, v); } cout << ((res == 1) ? "YES" : "NO") << endl; return 0; }