Cod sursa(job #2849591)

Utilizator popasebastian1213@gmail.comPopa Sebastian [email protected] Data 15 februarie 2022 13:10:06
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#include <vector>
#define NMAX 100002
#define MMAX 500002

using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
struct muchie
{
    int x,y;
    bool uz;
};
int n,m,poz;
muchie LM[MMAX];
vector <int> LA[NMAX];
int S[NMAX];
int vf;
int sol[NMAX];
void citire();
void ciclu();
void afisare();
bool grade_pare();
int main()
{
   citire();
   ciclu();
   if(!grade_pare())
      {
        fout<<-1<<'\n';
       return 0;
       }
   afisare();
    return 0;
}
void citire()
{
    int i,x,y;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
     fin>>x>>y;
     LM[i].x=x;
     LM[i].y=y;
     LA[x].push_back(i);
     LA[y].push_back(i);
    }
}
void ciclu()
{
 S[1]=1;
 vf=1;
 while(vf>0)
 {
  int crt=S[vf];
  if(LA[crt].size()==0)
  {
     sol[++poz]=crt;
     vf--;
  }
  else
  {
    int urm=LA[crt].back();
    LA[crt].pop_back();
    if(LM[urm].uz==0)
    {
     LM[urm].uz=1;
     if(LM[urm].x==crt)
        S[++vf]=LM[urm].y;
     else
        S[++vf]=LM[urm].x;
    }
  }
 }
}
void afisare()
{
    if(poz-1!=m)
        fout<<-1;
else
  for(int i=1;i<=poz-1;i++)
     fout<<sol[i]<<" ";
}
bool grade_pare()
{
    int i;
 for(i=1;i<=n;i++)
    if(LA[i].size()%2) return 0;
 return 1;
}