Cod sursa(job #676611)

Utilizator razvan2006razvan brezulianu razvan2006 Data 9 februarie 2012 13:14:44
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<stdio.h>
#include<vector>
#include<deque>
#define pb push_back
#define Nmax 100009

using namespace std;

int x,y,next,nod,n,m,i,j;
vector<int> a[Nmax];
vector<int>::iterator it;
deque<int> Q;

int DF()
{
    Q.pb(1);

    while (!Q.empty())
    {
        nod=Q.front();
        if (a[nod].empty())
        {
            printf("%d ",nod);
            Q.pop_front();
            continue;
        }
        next=a[nod].back();
        a[nod].pop_back();

        Q.push_front(next);
        for (it=a[next].begin();it!=a[next].end();it++)
            if (*it==nod)
            {
                a[next].erase(it);
                break;
            }
    }
}

int main()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);

    scanf("%d%d",&n,&m);
    for (i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        a[x].pb(y);
        a[y].pb(x);
    }

    for (i=1;i<=n;i++)
        if (a[i].size()%2)
        {
            printf("-1\n");
            return 0;
        }
    DF();
}