Cod sursa(job #2123783)

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

struct comb{
    int n, poz;
};

bitset<MMAX> viz;
vector <comb> nodes[NMAX+1];
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, i});
        nodes[n2].push_back({n1, i});
    }
    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()){
            comb fiu = nodes[nod].back();
            if (viz[fiu.poz]){
                nodes[nod].pop_back();
                continue;
            }
            stiva.push(fiu.n);
            nodes[nod].pop_back();
            viz[fiu.poz]=true;
        }
        else{
            sol.push_back(stiva.top());
            stiva.pop();
        }
    }
    sol.pop_back();
    for (auto x : sol)
        out << x << ' ';
}