Cod sursa(job #2541074)

Utilizator danutbodbodnariuc danut danutbod Data 8 februarie 2020 08:45:32
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#define N 100003
#define M  500003
using namespace std;
ifstream fi("ciclueuler.in");
ofstream fo("ciclueuler.out");
struct nod{
    int i;     //muchie i
    nod*urm;
 };
 nod *L[N];
 nod*p;
 struct muchie{int x,y;};
 muchie mu[M];
 int viz[M],sol[M],gr[N];
 int i,j,m,n,k,x,y;
inline void adauga(int i,int j){//pune in coada lui
  nod*p;                 //
  p=new nod;
  p->i=j;        //
  p->urm=L[i];
  L[i]=p;
 }
inline  void Euler(int j){
   nod *p;
   p=L[j];
   while(p){
    if(viz[p->i]==0)//muchia nu a fost folosita
     {
       viz[p->i]=1;
       Euler(mu[p->i].x+mu[p->i].y-j);
     }
     p=p->urm;
   }
 sol[++k]=j;
}


int main(){
    fi>>n>>m;
    for(i=1;i<=m;i++){
        fi>>x>>y;
        gr[x]++;
        gr[y]++;
        mu[i].x=x;mu[i].y=y;
        adauga(x,i);
        adauga(y,i);
    }
    bool ok=true;
    for(i=1;i<=n;i++)
        if(gr[i]%2==1)ok=false;
    if(ok==false)fo<<-1;
    else
        {
         Euler(1);
         for(i=1;i<=k-1;i++)fo<<sol[i]<<" ";
        }
   fi.close();fo.close();
return 0;
}