Cod sursa(job #2718131)

Utilizator Rares09Rares I Rares09 Data 8 martie 2021 14:58:59
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <vector>
#include <stack>

using namespace std;

ifstream cin ("ciclueuler.in");
ofstream cout("ciclueuler.out");

int n, m, used[500005], a[500005], b[500005], w[100005];
vector <int> v[100005], sol;
stack <int> s;

int main()
{
    cin >> n >> m;

    for(int i = 1; i <= m; ++i)
    {
        cin >> a[i] >> b[i];
        v[a[i]].push_back(i);
        v[b[i]].push_back(i);
        ++w[a[i]];
        ++w[b[i]];
    }

    for(int i = 1; i <= n; ++i)
    {
        if(w[i] % 2 != 0)
        {
            cout << -1 << '\n';
            return 0;
        }
    }

    s.push(1);

    while(!s.empty())
    {
        int x, y;
        x = s.top();

        if(v[x].empty())
        {
            s.pop();
            sol.push_back(x);
        }
        else
        {
            y = v[x].back();
            v[x].pop_back();

            if(used[y] == false)
            {
                s.push(x == b[y] ? a[y] : b[y]);
                used[y] = true;
            }
        }
    }


    for(auto it = sol.begin(); it + 1 != sol.end(); ++it)
        cout << *it << ' ';

    cout << '\n';
    return 0;
}