Cod sursa(job #2370292)

Utilizator waren4Marius Radu waren4 Data 6 martie 2019 11:31:27
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>

using namespace std;

ifstream f("ciclueuler.in"); ofstream g("ciclueuler.out");

int n,m;

vector <pair <int,int> > vecini[100005];

bool used[500005];

stack <int> s;

vector <int> sol;

int main() {
    int i;
    f>>n>>m;
    for(i = 1 ; i <= m; ++i) {
        int x,y;
        f>>x>>y;
        vecini[x].push_back({y,i});
        vecini[y].push_back({x,i});
    }
    for(i = 1 ; i <= n; ++i) {
        if(vecini[i].size() % 2 == 1) {
            g<<-1<<'\n';
            return 0;
        }
    }
    s.push(1);
    while (!s.empty()) {
        int nod = s.top();
        if (!vecini[nod].empty()) {
            int muchie = vecini[nod].back().second;
            int catre = vecini[nod].back().first;
            vecini[nod].pop_back();
            if(!used[muchie]) {
                used[muchie] = 1;
                s.push(catre);
            }
        }
        else {
            sol.push_back(nod);
            s.pop();
        }
    }
    for(i = 0; i < sol.size() - 1; ++i) {
        g<<sol[i]<<' ';
    }
   // g<<'\n';
    return 0;
}