Загрузка данных


#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <set>
#include <unordered_set>
#include <map>
#include <stack>
#include <queue>
#include <deque>
using namespace std;

void dfs(long long n, long long m, long long x, long long& k, set<long long>& used, vector<long long>& vec, long long color, map<long long, unordered_set<long long>> graph, string &ans) {

    used.insert(x);
    vec[x] = color;
    for (auto near: graph[x]) {
        if (vec[x] == vec[near]) {
            ans = "NO";
        }
        if (used.count(near) == 0) {
            if (color == 0) {
                dfs(n, m, near, k, used, vec, 1, graph, ans);
            }
            else {
                dfs(n, m, x, near, used, vec, 0, graph, ans);
            }

        }
    }
   
}

int main()
{
    long long n, m, r, c, k = 0, u, v, color = 0;
    cin >> n >> m;
    map<long long, unordered_set<long long>> graph;
    string ans = "YES";
    vector<long long> vec(n, -1);
    for (int i = 0; i < m; i++) {
        cin >> u >> v;
        graph[u - 1].insert(v - 1);
        graph[v - 1].insert(u - 1);
    }


    set<long long> used;
    
    dfs(n, m, 0, k, used, vec, color, graph, ans);
               
        
    
    
    cout << ans;

    return 0;
}