Cod sursa(job #2366517)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 4 martie 2019 20:36:10
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 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;
    }
}
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();
   solve();
   for(int i=0;i<sol.size()-1;i++)
    out<<sol[i]<<" ";
}