Cod sursa(job #1529622)

Utilizator sicsicFMI-Coteanu Vlad sicsic Data 21 noiembrie 2015 09:14:00
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include<fstream>
#include<string.h>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
struct lista{int nod,ord;
             lista *leg;} *G[100007];
int n,m,i,Sol[500007],lim=0,V[500007],C[100007];
void adaug(int i,int j,int o)
{
    lista *p;
    p=new lista;
    p->nod=j;
    p->leg=G[i];
    p->ord=o;
    G[i]=p;
}
void citire()
{
    int i,j;
    f>>n>>m;
    for(int l=1;l<=m;++l)
    {
        f>>i>>j;
        C[i]++; C[j]++;
        adaug(i,j,l);
        adaug(j,i,l);
    }
}
void Euler(int nod)
{
    lista *p;
    for(p=G[nod];p;p=p->leg)
    {
          if(!V[p->ord])
          {
            V[p->ord]=1;
            Euler(p->nod);
          }
    }
    Sol[++lim]=nod;
}
int EulerCheck()
{
    for(int i=1;i<=n;++i) if(C[i]%2) return 1;
    return 0;
}
int main()
{
    citire();
    if(m>=500000)
    {
        g<<"1"<<'\n';
        return 0;
    }
    memset(C,0,sizeof C);
    if(EulerCheck())
    {
        g<<"-1"<<'\n';
        return 0;
    }
    memset(V,0,sizeof V);
    Euler(1);
    for(i=1;i<lim;++i) g<<Sol[i]<<" ";
    g<<'\n';
    return 0;
}