Cod sursa(job #2384162)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 20 martie 2019 13:58:49
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>
#define pb push_back
using namespace std ;
const int NMAX = 100005 ;
const int MMAX = 500005 ;
ifstream in ("ciclueuler.in") ;
ofstream out ("ciclueuler.out") ;
int x , y , n , m , i , from [ MMAX ] , to [ MMAX ] , nod , edge ;
bool viz [ MMAX ] ;
vector < int > v [ NMAX ] , st , ans ;

int main() {

   in >> n >> m ;
   for ( i = 0 ; i < m ; ++ i ) {
    in >> x >> y ;
    v [ x ].pb ( i ) ;
    v [ y ].pb ( i ) ;
    from [ i ] = x ;
    to [ i ] = y ;
   }

    for ( i = 1 ; i <= n ; ++ i )
        if ( v [ i ].size() % 2 )   return out << -1 , 0 ;

    st.push_back ( 1 ) ;
    while ( !st.empty() )   {
        nod = st.back() ;
        if ( !v[ nod ].empty() ) {
            edge = v [ nod ].back () ;
            v [ nod ].pop_back() ;
            if ( !viz [ edge ] )   {
                viz [ edge ] = 1 ;
                st.push_back( to [ edge ] ^ from [ edge ] ^ nod ) ;
            }
        }   else    {

        st.pop_back() ;
        ans.push_back(nod) ;
        }
    }

    for ( i = 1 ; i < ans.size() ; ++ i ) out << ans [ i ] << ' ' ;

}