Cod sursa(job #2298023)

Utilizator Anastasia11Susciuc Anastasia Anastasia11 Data 6 decembrie 2018 23:14:02
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <iomanip>
#include <bitset>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#define INF (1<<28)
#define Nmax 1000005

using namespace std;

string file="ciclueuler";
//string file="1";

ifstream f( (file + ".in").c_str() );
ofstream g( (file + ".out").c_str() );

int n, m;
vector <pair <int, int> > v[Nmax];
queue <int> Q;
bitset <Nmax/2> seen;

bool check()
{
    for (int i = 1; i <= n; i++)
        if(v[i].size()%2 == 1) return 0;
    return 1;
}

void euler(int x)
{
    while(v[x].size())
    {
        int y =v[x].back().first;
        int mc=v[x].back().second;
        v[x].pop_back();
        if(seen[mc] == 1) continue;
        seen[mc]=1;
        euler(y);
    }
    Q.push(x);
}

void print()
{
    while(Q.size()>1)
    {
        g << Q.front() << " ";
        Q.pop();
    }
}

int main()
{
    f >> n >> m;
    for (int i = 1, x, y; i <= m; i++)
    {
        f >> x >> y;
        v[x].push_back({y, i});
        v[y].push_back({x, i});
    }
    if(check() ==  0)
    {
        g << "-1";
        return 0;
    }
    euler(1);
    print();
    return 0;
}