Cod sursa(job #2701751)

Utilizator richardbaczur1Baczur Richard richardbaczur1 Data 1 februarie 2021 17:09:48
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>
#define NMAX 100005
#define infile "ciclueuler.in"
#define outfile "ciclueuler.out"

using namespace std;
vector<int> G[NMAX], rez;
stack<int> s;
bool fin[5 * NMAX];
int n, m, x, y;
int dela[5 * NMAX], pana[5 * NMAX];
int main()
{
    freopen(infile, "r", stdin);
    freopen(outfile, "w", stdout);

    scanf("%d %d", &n, &m);
    for (int i = 0; i < m; ++i)
    {
        scanf("%d %d", &x, &y);
        G[x].push_back(i);
        G[y].push_back(i);
        dela[i] = x;
        pana[i] = y;
    }

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

    s.push(1);
    while (!s.empty())
    {
        int w = s.top();
        if (!G[w].empty())
        {
            int e = G[w].back();
            G[w].pop_back();
            if (!fin[e])
            {
                fin[e] = 1;
                s.push(dela[e] ^ pana[e] ^ w);
            }
        } else
        {
            s.pop();
            rez.push_back(w);
        }
    }

    for (int i = 0; i < rez.size() - 1; ++i)
    {
        printf("%d ", rez[i]);
    }

    fclose(stdin);
    fclose(stdout);
    return 0;
}