Cod sursa(job #2209821)

Utilizator Anastasia11Susciuc Anastasia Anastasia11 Data 4 iunie 2018 20:16:47
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
#define Nmax 1000004

using namespace std;

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

vector <pair <int, int> > v[Nmax];
bitset <Nmax/2> seen;
queue <int> Q;
bool ok=true;
int n, m, x, y;

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 ( int 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();
    }
}