Cod sursa(job #1405625)

Utilizator heracleRadu Muntean heracle Data 29 martie 2015 14:33:35
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <cstdio>

FILE* in=fopen("ciclueuler.in","r");
FILE* out=fopen("ciclueuler.out","w");

const int Q=100007,W=500003;

int n,m;

int lst[Q],val[2*W],nxt[2*W],nr;
bool mers[2*W];

void add(int a, int b)
{
    val[++nr]=b;
    nxt[nr]=lst[a];
    lst[a]=nr;
}

//int stv[W];

void dfs(int x, int find)
{
    if(x==find)
    {
        fprintf(out,"%d ",x);
        return;
    }


    for(int p=lst[x]; p; p=nxt[p])
    {
        if(mers[p]==0)
        {
            mers[p]=1;
            mers[((p+1) /2)*4-1-p]=1;

            dfs(val[p],find);
            break;
        }
    }

    for(int p=lst[x]; p; p=nxt[p])
    {
        if(mers[p]==0)
        {
            mers[p]=1;
            mers[((p+1) /2)*4-1-p]=1;
            dfs(val[p],x);
        }
    }

    fprintf(out,"%d ",x);
}

//int cont[Q];

int main()
{
    fscanf(in,"%d%d",&n,&m);

    int a,b;

    for(int i=1; i<=m; i++)
    {
        fscanf(in,"%d%d",&a,&b);

       // cont[a]++;
       // cont[b]++;

        add(a,b);
        add(b,a);
    }

 //   stv[++stv[0]]=1;

    for(int p=lst[1]; p; p=nxt[p])
    {
        if(mers[p]==0)
        {
            mers[p]=1;
            mers[((p+1) /2)*4-1-p]=1;

            dfs(val[p],1);
        }
    }



    return 0;
}