Cod sursa(job #2679021)

Utilizator Iustin01Isciuc Iustin - Constantin Iustin01 Data 29 noiembrie 2020 12:53:39
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>
#define MAX 100005
using namespace std;

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

vector < int > g[MAX];
vector < pair < int , int > > l;
bitset < 5 * MAX > c;
vector < int > sol;
stack < int > st;

int n, m, x, y;

int main(){
    in>>n>>m;
    while(m--){
        in>>x>>y;
        l.push_back({x, y});
        g[x].push_back(l.size() - 1);
        g[y].push_back(l.size() - 1);
    }
    for(int i = 1; i <= n; i++)
    if(g[i].size() & 1){
        out<<-1;
        return 0;
    }

    st.push(1);
    while(!st.empty()){
         int k = st.top();
         if(!g[k].empty()){
                    int nivel = g[k].back();
                    g[k].pop_back();
                    if(!c[nivel]){
                        c[nivel] = true;
                        int vec = l[nivel].second;
                        if(vec != k)
                            st.push(vec);
                        else
                           st.push(l[nivel].first);
                    }
        }
        else{
            st.pop();
            sol.push_back(k);
        }
    }

    for(int i = 0; i < sol.size() - 1; i++)
        out<<sol.at(i)<<" ";
}