Cod sursa(job #387075)

Utilizator mircea_infoSuciu Mircea-Gabriel mircea_info Data 26 ianuarie 2010 19:50:40
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <cstdio>
#include <vector>

using namespace std;

vector <pair<int,int> > g[100001];
int deg[100001],viz[100001];
int stack[500001],top;
int n,m;

void parc(int x)
{
    stack[++top]=x;
    int val;
    while(top)
    {
        val=stack[top];
        if(!g[val].empty())
            if(!viz[g[val].back().second])
            {
                viz[g[val].back().second]=1;
                stack[++top]=g[val].back().first;
                g[val].pop_back();
            }
            else
                g[val].pop_back();
        else
        {
            printf("%d ",stack[top]);
            top--;
        }
    }
}

int main()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    scanf("%d%d",&n,&m);
    int x,y;
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        g[x].push_back(make_pair(y,i));
        g[y].push_back(make_pair(x,i));
        deg[x]++;
        deg[y]++;
    }
    int ok=1;
    for(int i=1;i<=m;i++)
        if(deg[i]%2)
            ok=0;
    if(ok==0)
        printf("-1");
    else
        parc(1);
    fclose(stdout);
    return 0;
}