Cod sursa(job #2699257)

Utilizator Ionut2791Voicila Ionut Marius Ionut2791 Data 23 ianuarie 2021 22:51:30
Problema Ciclu Eulerian Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
#define ll long long
#define sz(v) (int)v.size()
using namespace std;

const int NMAX = 1e5 + 5;
vector<unordered_multiset<int>> graf(NMAX);
vector<int> ans;
int n, m;
bool ok = false;

    ifstream fin("ciclueuler.in");
    ofstream fout("ciclueuler.out");

void dfs(int nod) {

    while(!graf[nod].empty()) {
        int x = *graf[nod].begin();
        assert(graf[nod].find(x) != graf[nod].end());
        graf[nod].erase(graf[nod].find(x));
        assert(graf[x].find(nod) != graf[x].end());
        graf[x].erase(graf[x].find(nod));
        if(x != 1)
            dfs(x);
    }

    ans.push_back(nod);
}

int main() {
    //ifstream fin("date.in.txt");
    fin >> n >> m;
    for (int i = 1; i <= m; ++i) {
        int a, b;
        fin >> a >> b;
        graf[a].insert(b);
        graf[b].insert(a);
    }

    for (int i = 1; i <= n; ++i) {
        if(sz(graf[i]) % 2 == 1) {
            fout << -1;
            return 0;
        }
    }

    dfs(1);

    for (int x : ans)
        fout << x << " ";

    return 0;
}