Cod sursa(job #2892376)

Utilizator LucaMihaiLM10Luca Ilie LucaMihaiLM10 Data 21 aprilie 2022 20:20:15
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>

#define MAX_N 100000
#define MAX_M 500000

using namespace std;

bool used[MAX_M];
pair <int, int> edge[MAX_M];
vector <int> edges[MAX_N];
stack <int> s;
vector <int> ans;

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

    int n, m, e, u, v, i;

    cin >> n >> m;
    for ( i = 0; i < m; i++ ) {
        cin >> u >> v;
        u--;
        v--;

        edge[i] = { u, v };
        edges[u].push_back( i );
        edges[v].push_back( i );
        used[i] = false;
    }

    u = 0;
    while ( u < n && edges[u].size() % 2 == 0 )
        u++;
    if ( u < n ) {
        cout << -1;
        return 0;
    }

    s.push( 0 );
    while ( !s.empty() ) {
        u = s.top();

        if ( edges[u].size() ) {
            e = edges[u].back();
            edges[u].pop_back();
            if ( !used[e] ) {
                used[e] = true;
                s.push( (u == edge[e].second ? edge[e].first : edge[e].second) );
            }
        } else {
            ans.push_back( u + 1 );
            s.pop();
        }
    }

    for ( i = 0; i < ans.size() - 1; i++ )
        cout << ans[i] << " ";

    return 0;
}