Cod sursa(job #2121051)

Utilizator berindeiChesa Matei berindei Data 3 februarie 2018 11:29:21
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>
using namespace std;
int const NMAX=100000;
int const MMAX=500000;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");

vector <int> nodes[NMAX];
vector <int> sol;
stack <int> stiva;

int main(){
    int n, m, n1, n2, i;
    in >> n >> m;
    for (i=1; i<=m; i++){
        in >> n1 >> n2;
        nodes[n1].push_back(n2);
        nodes[n2].push_back(n1);
    }
    for (i=1; i<=n; i++)
        if (nodes[i].size()&1){
            out << -1;
            return 0;
        }
    stiva.push(1);
    while(!stiva.empty()){
        int nod = stiva.top();
        if (!nodes[nod].empty()){
            int fiu = nodes[nod].back();
            stiva.push(fiu);
            nodes[nod].pop_back();
            nodes[fiu].erase(find(nodes[fiu].begin(), nodes[fiu].end(), nod));
        }
        else{
            sol.push_back(stiva.top());
            stiva.pop();
        }
    }
    sol.pop_back();
    for (auto x : sol)
        out << x << ' ';
}