Cod sursa(job #2508863)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 13 decembrie 2019 10:45:47
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
//#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int Max=100005;
const int Mmax=500000;
vector <int>v[Max],ans;
stack <int>s;
int n,m,viz[Mmax];
struct muchie
{
   int x,y;
}muc[Mmax];
void citire()
{
   in>>n>>m;
   for(int i=1;i<=m;i++)
   {
       int x,y; in>>x>>y;
       muc[i]={x,y};
       v[x].push_back(i);
       v[y].push_back(i);
   }
}
int vereuler()
{
    for(int i=1;i<=n;i++)
        if(v[i].size()%2!=0)
        return 0;
    return 1;
}
void Euler()
{
    s.push(1);
    while(!s.empty())
    {
        int nod=s.top();
        if(!v[nod].empty())
        {
             int m=v[nod].back();
                v[nod].pop_back();
           if(!viz[m])
           {
              viz[m]=1; int la;
               if(muc[m].x!=nod)
                 la=muc[m].x;
            else
              la=muc[m].y;
             s.push(la);

           }
        }
        else
        {
            int q=s.top();
            s.pop();
            ans.push_back(q);

        }

    }
    for(int i=0;i<ans.size()-1;i++)
        out<<ans[i]<<" ";
}
int main()
{
    citire();
    if(vereuler()==0)
        out<<"-1";
    else
      Euler();
    return 0;
}