Cod sursa(job #1835229)

Utilizator passwordCiaciru Ana Maria password Data 26 decembrie 2016 16:13:01
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <cstdio>
#include <vector>
#include <stack>
#include <algorithm>
#define SZ(x) ((int) (x).size())
using namespace std;
const int nmax=100001, mmax=500001;
FILE *f,*g;
vector <int> G[nmax];
bool viz[mmax];
int from[mmax], to[mmax];
int n,m;
vector <int> V; //gen solutiei
void read()
{int i,x,y;
 fscanf(f,"%d%d",&n,&m);
 for(i=0;i<m;i++)
   {fscanf(f,"%d%d",&x,&y);
    G[x].push_back(i);
    G[y].push_back(i);
    from[i]=x;
    to[i]=y;
   }
 fclose(f);
}

void solution()
{
    stack <int> S;
    S.push(1);
    while(!S.empty())
    { int nod=S.top();
      if(!G[nod].empty())
        {int e=G[nod].back();
         G[nod].pop_back();
         if(!viz[e])
           {viz[e]=1;
            int to=::from[e]^::to[e]^nod;
            S.push(to);
           }}
      else
      {S.pop();
       V.push_back(nod);
      }
    }
}

void print()
{
    for(int i=0;i<SZ(V)-1;++i)
        fprintf(g,"%d ",V[i]);
    fprintf(g,"\n");
}
int main()
{   f=fopen("ciclueuler.in","r");
    g=fopen("ciclueuler.out","w");
    read();
    int i;
    for(i=1;i<=n;i++)
        if(SZ(G[i])&1==1)
            {fprintf(g,"-1\n"); return 0;}
    solution();
    print();
    fclose(g);
    return 0;
}