Cod sursa(job #2558568)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 26 februarie 2020 17:31:07
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
//#include <iostream>
#include <bits/stdc++.h>
using namespace std;

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

const int NMax=100005;
const int Mmax=500005;
int n,m;
stack <int >s;
int viz[Mmax];

struct muchie
{
    int x,y;
}muc[Mmax];
vector <int>v[NMax],sol;

void citire()
{
    in>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y; in>>x>>y;
        v[x].push_back(i);
        v[y].push_back(i);
        muc[i]={x,y};
    }
}

void sol1()
{
    s.push(1);
    while(!s.empty())
    {
        int nod=s.top();
        if(!v[nod].empty())
        {
           int ind=v[nod].back();
           v[nod].pop_back();
           if(!viz[ind])
           {
               viz[ind]=1;
               if(muc[ind].x==nod)
                s.push(muc[ind].y);
               else
                s.push(muc[ind].x);
           }
        }
         else
           {
               sol.push_back(s.top());
               s.pop();
           }
    }
    for(int j=0;j<sol.size()-1;j++)
        out<<sol[j]<<" ";
}

int main()
{
    citire(); bool ok=1;
    for(int i=1;i<=n;i++)
        if(v[i].size()%2!=0)
        ok=0;
    if(ok)
        sol1();
    else
        out<<-1;

    return 0;
}