Cod sursa(job #2175285)

Utilizator geniucosOncescu Costin geniucos Data 16 martie 2018 16:26:21
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<bits/stdc++.h>

using namespace std;

int N, M, x[500009], y[500009];
bool deleted[500009];
vector < int > v[100009];
vector < int > :: iterator currIt[100009];

void euler (int nod)
{
    while (currIt[nod] != v[nod].end ())
    {
        int e = *currIt[nod];
        currIt[nod] ++;
        if (!deleted[e])
            deleted[e] = 1,
            euler (x[e] ^ y[e] ^ nod),
            printf ("%d ", nod);
    }
}

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

scanf ("%d %d", &N, &M);
for (int i=1; i<=M; i++)
{
    scanf ("%d %d", &x[i], &y[i]);
    v[x[i]].push_back (i);
    v[y[i]].push_back (i);
}
for (int i=1; i<=N; i++)
    if (v[i].size () & 1)
    {
        printf ("-1\n");
        return 0;
    }
for (int i=1; i<=N; i++)
    currIt[i] = v[i].begin ();
euler (1), printf ("\n");
return 0;
}