Cod sursa(job #2492769)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 15 noiembrie 2019 11:29:32
Problema Ciclu Eulerian Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int N=100001;
const int M=5*N;
FILE*fin,*fout;
struct ajutormuchii{
  int dest;
  int id;
};
bool vizm[M];
bool vizn[N+5];
vector<ajutormuchii> gr[N];
int q[M];
int cnt=0;
void dfs_euler(int nod,int &cntafis,int m){
  if(vizn[nod]==0){
    cnt++;
  }
  vizn[nod]=1;
  for(auto x:gr[nod]){
    if(vizm[x.id]==false){
      vizm[x.id]=true;
      dfs_euler(x.dest,cntafis,m);
    }
  }
  q[++cntafis]=nod;
}

const int SIZE=1<<10;

char buffer[SIZE];

int point=SIZE;
inline char adv(){

  if(point==SIZE){

    fread(buffer,1,SIZE,fin);

    point=0;

  }

  return buffer[point++];

}

inline int read(){

  char c;

  int x=0,sgn=1;

  c=adv();

  while(isdigit(c)==false && c!='-')

    c=adv();

  while(c=='-'){

    sgn*=-1;

    c=adv();

  }

  while(isdigit(c)){

    x=x*10+c-'0';

    c=adv();

  }

  return x*sgn;

}
int main()
{
  int n,m;
  fin=fopen("ciclueuler.in","r");
  fout=fopen("ciclueuler.out","w");
  fscanf(fin,"%d%d",&n,&m);
  int id=0;
  for(int i=1;i<=m;i++){
    int x,y;
    x=read();
    y=read();
    ++id;
    gr[x].push_back({y,id});
    gr[y].push_back({x,id});
  }
  /*cnt=0;
  dfs_nod(1);
  if(cnt!=n){
    fprintf(fout,"-1\n");
    return 0;
  }*/
  for(int i=1;i<=n;i++){
    if(gr[i].size()%2==1){

    }
  }
  int c=0;
  dfs_euler(1,c,m);
  if(cnt==n){
    for(int i=1;i<=m;i++){
      fprintf(fout,"%d ",q[i]);
    }
  }
  else{
    fprintf(fout,"-1\n");
      return 0;
  }
  return 0;
}