Cod sursa(job #2366525)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 4 martie 2019 20:39:51
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int n,m;
const int Maxn=100005;
const int Maxm=500005;
vector < int >v[Maxn],sol; stack < int >s;
struct {int x,y,viz;}muc[Maxm];
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=x; muc[i].y=y; muc[i].viz=0;
    }
}
bool euler()
{
    for(int i=1;i<=n;i++)
        if(v[i].size()%2)
        return 0;
    return 1;
}
void solve()
{
    s.push(1);
    while(!s.empty())
    {
        int nod=s.top();
        if(!v[nod].empty())
        {
              int ind=v[nod].back();
              v[nod].pop_back();
              if(muc[ind].viz==0)
             {
               muc[ind].viz=1;
               if(nod==muc[ind].x)
                   s.push(muc[ind].y);
               else
                   s.push(muc[ind].x);
            }
        }
        else
        {
            sol.push_back(nod);
            s.pop();
        }

    }
}
int main()
{
   citire();
   if(!euler())
    out<<-1;
   else
   {
       solve();
           for(int i=0;i<sol.size()-1;i++)
             out<<sol[i]<<" ";
   }

}