Cod sursa(job #2871096)

Utilizator AndreiCroitoruAndrei Croitoru AndreiCroitoru Data 12 martie 2022 21:06:06
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;
const int N = 100001;

vector <pair<int, int>> g[N];
bool verif[N];
int used[N];

void dfs(int node)
{
    if(verif[node])
        return;
    verif[node] = 1;
    for(auto nxt:g[node])
        dfs(nxt.first);
}

stack <int> st;

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

    int n, m;
    cin >> n >> m;
    for(int i = 1; i <= m; i++)
    {
        int a, b;
        cin >> a >> b;
        g[a].push_back({b, i});
        g[b].push_back({a, i});
    }
    dfs(1);
    for(int i = 1; i <= n; i++)
    {
        if(g[i].size() % 2 == 1 or !verif[i])
        {
            cout << "-1";
            return 0;
        }
    }
    st.push(1);
    for(int i = 1; i <= m; i++)
    {
        int aux = st.top();
        while(!g[aux].empty())
        {
            pair<int, int> vecin = g[aux].back();
            g[aux].pop_back();
            if(used[vecin.second])
                continue;
            used[vecin.second] = 1;
            aux = vecin.first;
            st.push(aux);
        }
        cout << aux << " ";
        st.pop();
    }
    return 0;
}