Cod sursa(job #2374250)

Utilizator herbertoHerbert Mohanu herberto Data 7 martie 2019 17:41:04
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
#define nmax 100001
#define mmax 500001

using namespace std;

vector <int> v[nmax];
bool used[mmax];
int A[mmax], B[mmax];

vector <int> sol;
vector <int> q;

int main(){
  FILE *fin, *fout;
  int n,m,i,j,x;
  fin=fopen("ciclueuler.in","r");
  fout=fopen("ciclueuler.out","w");
  fscanf(fin,"%d%d",&n,&m);
  for(x=0;x<m;x++){
    fscanf(fin,"%d%d",&i,&j);
    v[i].push_back(x);
    v[j].push_back(x);
    A[x]=i;
    B[x]=j;
  }
  for(i=1;i<=n;i++){
    if(v[i].size()%2==1){
      fprintf(fout,"-1");
      return 0;
    }
  }
  q.push_back(1);
  while(!q.empty()){
    int nod = q.back();
    if(!v[nod].empty()){
      int dest=v[nod].back();
      v[nod].pop_back();
      if(!used[dest]){
        used[dest]=1;
        int loc = A[dest];
        if(loc == nod)
          loc = B[dest];
        q.push_back(loc);
      }
    }else{
      q.pop_back();
      sol.push_back(nod);
    }
  }
  for(i=0;i<sol.size()-1;i++){
    fprintf(fout,"%d ",sol[i]);
  }
  fclose(fin);
  fclose(fout);
  return 0;
}