Cod sursa(job #3329720)

Utilizator davidgeo123Georgescu David davidgeo123 Data 15 decembrie 2025 09:00:58
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX=1e5;
vector<int> ans, st;
int n, m, grad[NMAX+1];
unordered_multiset<int> s[NMAX+1];
///available edges

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

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

    cin>>n>>m;
    for(int i=1, x, y; i<=m; i++)
    {
        cin>>x>>y;
        s[x].insert(y);
        s[y].insert(x);

        ++grad[x];
        ++grad[y];
    }

    for(int i=1; i<=n; i++)
        if(grad[i]%2==0)
        {
            cout<<-1;
            return 0;
        }
    st.push_back(1);
    while(!st.empty())
    {
        int nod=st.back();

        if(s[nod].empty())
        {
            ans.push_back(nod);
            st.pop_back();
        }
        else
        {
            int to=*(s[nod].begin());
            s[nod].erase(s[nod].find(to));
            s[to].erase(s[to].find(nod));
            st.push_back(to);
        }
    }

    int szans=ans.size();
    for(int i=0; i<szans-1; i++)
        cout<<ans[i]<<' ';
    return 0;
}