Cod sursa(job #1918437)

Utilizator marcdariaDaria Marc marcdaria Data 9 martie 2017 15:26:01
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>


using namespace std ;

const int NMAX = 500005 ;

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

vector <int> V[NMAX];
stack <int> S;
int N, M, U[NMAX];



inline void Euler()
{

    S.push(1) ;

    while(!S.empty())
    {
        int nod = S.top() ;

        if(V[nod].size())
        {
            int nod_nou = V[nod].back() ;
            V[nod].pop_back();
            V[nod_nou].erase(find(V[nod_nou].begin(), V[nod_nou].end(), nod)) ;
            S.push(nod_nou) ;
        }

        else
        {
            fout << nod << ' ' ;
            S.pop() ;
        }
    }
}


int main()
{
    fin >> N >> M ;

    for(int i = 1 ; i <= M ; ++ i)
    {
        int x, y ;
        fin >> x >> y ;
        V[x].push_back(y) ;
        V[y].push_back(x) ;
        U[x] ++ ;   ///U[x] - gradul nodului x
        U[y] ++ ;
    }

    for(int i = 1 ; i <= N ; ++ i)
        if(!V[i].size() || U[i] % 2 == 1)
        {
            fout << "-1\n" ;
            return 0 ;
        }

    Euler() ;

    fin.close() ;
    fout.close() ;
    return 0 ;
}