Cod sursa(job #2492799)

Utilizator vladcainamisirVlad Cainamisir vladcainamisir Data 15 noiembrie 2019 12:04:26
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.79 kb
#include<cstdio>
#include<vector>
#include<cstring>
#include<cctype>
const int MMAX = 500000;
const int NMAX = 100000;
FILE*fin,*fout;
struct muchie
{
    int x , y;
    bool exist;
};
muchie muchii[2 * MMAX + 1];
bool viz[NMAX + 1];
int vecini[NMAX + 1];
int total = 0;
std :: vector<int>v[NMAX + 1];
std :: vector<int>q;
const int SIZE=1<<15;

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;

}
void dfs(int nod)

{

    if(viz[nod] == 0){

        viz[nod] = 1;

        total ++;

    }

    for(int i = 0; i < v[nod].size() ; i ++)

    {

        if(muchii[  v[nod][i]  ].exist == 1)

        {

            muchii[ v[nod][i]  ].exist = 0;

            if(muchii[ v[nod][i] ].x == nod)

            dfs(muchii[ v[nod][i] ].y);

            else

            dfs(muchii[ v[nod][i] ].x);

        }

    }

    q.push_back(nod);

}
int main()
{
    int n , m , x , y , k = 0;
  fin=fopen("ciclueuler.in","r");
  fout=fopen("ciclueuler.out","w");
    n = read();
    m = read();
    for(int i = 1; i <= m ; i ++)
    {
        x= read();
        y = read();
        muchii[++k] = {x , y , 1};
        v[x].push_back(k);
        v[y].push_back(k);
        vecini[x] ++;
        vecini[y] ++;
    }
    dfs(1);
    for(int i = 1; i <= n ; i ++)
    if(vecini[i] % 2 == 1){
    total = n - 1;
    break;
    }
    if(total != n){
        fprintf(fout , "-1");
        return 0;
    }
    for(int i = m  ; i > 0 ; i --)
    {
        fprintf(fout , "%d " , q[i]);
    }
    return 0;
}