Cod sursa(job #2438350)

Utilizator AlexNeaguAlexandru AlexNeagu Data 12 iulie 2019 12:40:13
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");
vector < int > E[100005], Ciclu_Euler;
stack < int > st;
vector < pair < int, int > > ED(500005);
bool visited[500005];
int n, m;
int main()
{
    cin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        int x, y;
        cin >> x >> y;
        E[x].push_back(i);
        E[y].push_back(i);
        ED[i] = {x, y};
    }
    for (int i = 1; i <= n; i++) if (E[i].size() & 1) return cout << "-1", 0;
    st.push(1);
    while (!st.empty())
    {
        int node = st.top();
        if (E[node].size())
        {
        int muchie = E[node].back();
        E[node].pop_back();
        if (!visited[muchie])
            {
            visited[muchie] = true;
            int x = ED[muchie].first;
            int y = ED[muchie].second;
            if (node == y) swap(x, y);
            st.push(y);
            }
        }
        else
        {
            Ciclu_Euler.push_back(node);
            st.pop();
        }
    }
    Ciclu_Euler.pop_back();
    for (auto it : Ciclu_Euler) cout << it << " ";
    return 0;
}