Cod sursa(job #2543962)

Utilizator nicolaee2Martinescu Nicolae nicolaee2 Data 11 februarie 2020 17:46:07
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>

#define NMAX 500005
using namespace std;

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

int n,m;
vector<int> ma[NMAX];
int from[NMAX];
int to[NMAX];
int viz[NMAX];

void citire()
{
   fin>>n>>m;
   for(int i=0;i<m;i++)
   {
      int x,y;
      fin>>x>>y;
      ma[x].push_back(i);
      ma[y].push_back(i);
      from[i] = y;
      to[i] = x;
   }

}






int main()
{
   citire();

   for(int i=1;i<=n;i++)
   {
      if(ma[i].size() & 1)
      {
         fout<<-1;
         return 0;
      }
   }


   vector<int> ans,stiva;

   stiva.push_back(1);

   while(!stiva.empty())
   {
      int nod = stiva.back();
      if(!ma[nod].empty())
      {
         int e = ma[nod].back();
         ma[nod].pop_back();
         if(!viz[e])
         {
            viz[e] = 1;
            int r = to[e] ^ from[e] ^ nod;
            stiva.push_back(r);
         }
      }
      else
      {
         stiva.pop_back();
         ans.push_back(nod);
      }
   }

   for(int i = 0;i<ans.size();i++)
      fout<<ans[i]<<" ";

}