#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; class UnionFindTree { private: int n; int groupNum; // グループの数 vector parent; // 親ノード vector rank; // 木の高さの上限 vector num; // グループの要素数 int find(int i){ if(parent[i] == i) return i; else return parent[i] = find(parent[i]); } public: UnionFindTree(int n){ // コンストラクタ this->n = n; groupNum = n; parent.resize(n); for(int i=0; i> n >> m; UnionFindTree uft(n); vector used(n, false); vector check(n, false); int groupNum = n + 1; int oddCnt = 0; for(int i=0; i v(2); for(int j=0; j<2; ++j){ int a; cin >> a; v[j] = a; if(!used[a]){ -- groupNum; used[a] = true; } if(!check[a]){ ++ oddCnt; check[a] = true; } else{ -- oddCnt; check[a] = false; } } uft.unite(v[0], v[1]); } if(uft.getNum() == groupNum && oddCnt <= 2) cout << "YES" << endl; else cout << "NO" << endl; return 0; }