Cod sursa(job #2220288)

Utilizator tiberiu392Tiberiu Ungurianu tiberiu392 Data 11 iulie 2018 10:41:57
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
#include <cstring>
#define DIM 1000002
using namespace std;

ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
queue < int > Q;
vector <pair <int, int> > v[DIM];
bitset <DIM/2> seen;
int n, m, i, j, x, y;
bool ok= true;
void read()
{
    f >> n >> m;
    for(int i = 1 ; i <= m ; i++ )
    {
        f >> x >> y;
        v[x].push_back( make_pair( y, i));
        v[y].push_back( make_pair( x, i));
    }
}
void check()
{
     for( i = 1 ; i <= n ; i++ )
     if( v[i].size()%2 == 1 )
    ok  = false;
}

void euler( int node)
{
    while ( v[node].size())
    {
    int muchie = v[node].back().second;
    int vecin = v[node].back().first;
    v[node].pop_back();
    if( seen[muchie] == 1)
        continue;
    seen[muchie] = 1;
    euler(vecin);
    }
    Q.push(node);
}
void print()
{
    while( Q.size() > 1 )
    {
         g << Q.front() <<" ";
          Q.pop();
    }
}
int main()
{
   read();
   check();
   if( ok ==  false)
    g << "-1";
   else
   {
       euler(1);
    print();
   }

    return 0;
}