Cod sursa(job #3361927)

Utilizator Radu_BicliBiclineru Radu Radu_Bicli Data 29 iulie 2026 22:35:58
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

#define USE_STD_IO 0
#if USE_STD_IO
    #define fin cin
    #define fout cout
#else
    ifstream fin("ciclueuler.in");
    ofstream fout("ciclueuler.out");
#endif

struct Muchie {
    int vec, idx;
};

vector<Muchie> gr[500002];
int n, m, i, x, y;
bool viz[500002];


vector<int> rasp;

static inline void Euler(int nod) {
    while(!gr[nod].empty()) {
        Muchie mch = gr[nod].back();
        gr[nod].pop_back();

        if(!viz[mch.idx]) {
            viz[mch.idx] = true;
            Euler(mch.vec);
        }
    }
    rasp.push_back(nod);
}


int main() {
    #if USE_STD_IO
        ios_base::sync_with_stdio(false);
    #endif
    fin.tie(NULL);
    fout.tie(NULL);

    fin >> n >> m;
    for(i = 1; i <= m; i++) {
        fin >> x >> y;
        gr[x].push_back({y, i});
        gr[y].push_back({x, i});
    }

    int start = 1, gres = 0;
    for(i = 1; i <= n; i++) {
        if(1 & gr[i].size()) {
            gres++;
            start = i;
        }
    }

    if(0 != gres) {
        fout << "-1";
        return 0;
    }

    Euler(start);

    if(m != rasp.size() - 1) {
        fout << "-1";
        return 0;
    }

    m = rasp.size() - 1;
    for(i = 0; i < m; i++) {
        fout << rasp[i] << ' ';
    }

    return 0;
}