Cod sursa(job #2999503)

Utilizator dorupopDoru Pop dorupop Data 11 martie 2023 07:24:19
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include<vector>
#include<stack>
using namespace std;
struct muchie{
   int x,y,viz;
};
muchie mch[500001];
int  ciclu[500005];
vector <int> g[100001];
stack<int> stk;
int n,m,x,y;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int main()
{
      fin>>n>>m;
      for(int i=1;i<=m;i++){
          fin>>x>>y;
          mch[i].x=x;
          mch[i].y=y;
          g[x].push_back(i);
          g[y].push_back(i);
      }
   for(int i=1;i<=n;i++)
      if(g[i].size()%2!=0)
   {
       fout<<-1;
       return 0;
   }
   int vec;
   ciclu[1]=1;
   stk.push(1);
   int k=0;
   while(!stk.empty()){
       int nod=stk.top();
       int ok=0;
       while(!g[nod].empty()){
          int nr=g[nod].back();
          g[nod].pop_back();
          if(mch[nr].viz==0){
          int x=mch[nr].x, y=mch[nr].y;
            if(nod==x)
                vec=y;
            else
                vec=x;
            stk.push(vec);
            mch[nr].viz=1;
            ok=1;
            break;
          }
       }
      if(ok==0){
        ciclu[++k]=nod;
        stk.pop();
      }
   }
   if(k!=m+1){
       fout<<-1;
       return 0;
   }
   for(int i=1;i<k;i++)
      fout<<ciclu[i]<<" ";

    return 0;
}