Cod sursa(job #2175716)

Utilizator ade_tomiEnache Adelina ade_tomi Data 16 martie 2018 18:38:21
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>

using namespace std;

const int NMAX = 100004;
const int MMAX = 500005;

vector <pair<int, int> > v[NMAX];
vector<int> sol;

stack<int> s;

int seen[MMAX], n, m;

int main() {
    ifstream cin ("ciclueuler.in");
    ofstream cout ("ciclueuler.out");

    cin >> n >> m;

    for (int i = 1; i <= m; i++) {
        int x, y;
        cin >> x >> y;
        
        v[x].push_back(make_pair(y, i));
        v[y].push_back(make_pair(x, i));
    }

    for (int i = 1; i <= n; i++) {
        if (v[i].size() % 2 == 1) {
            cout << "-1";
            return 0;
        }
    }

    s.push(1);
    
    while (!s.empty()) {
        int nod = s.top();

        if (v[nod].size() == 0) {
            sol.push_back(nod);
            s.pop();
        } else {
            int edge = v[nod].back().second;
            int y = v[nod].back().first;

            v[nod].pop_back();

            if (!seen[edge]) {
                seen[edge] = 1;
                s.push(y);
            }
        }
    }

    for (int i = 0; i < sol.size() - 1; i++) {
        cout << sol[i] << " ";
    }

    return 0;
}