Cod sursa(job #2737053)

Utilizator dimi999Dimitriu Andrei dimi999 Data 4 aprilie 2021 13:00:20
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

int N, M;

vector <pair <int, int>> v[100005];

stack <int> st;
int entered[100005];

bool vis[500005];

int main()
{
    fin >> N >> M;

    for(int i = 1; i <= M; i++)
    {
        int x, y;

        fin >> x >> y;

        v[x].push_back({y, i});
        v[y].push_back({x, i});
    }

    for(int i = 1; i <= N; i++)
        if(v[i].size() % 2 == 1)
        {
            fout << -1;
            return 0;
        }

    st.push(1);

    vector <int> ans;

    while(!st.empty())
    {
        int vf = st.top();

        if(entered[vf] == v[vf].size())
        {
            st.pop();
            ans.push_back(vf);
            continue;
        }

        if(vis[v[vf][entered[vf]].second] == false)
        {
            st.push(v[vf][entered[vf]].first);
            vis[v[vf][entered[vf]].second] = true;
        }

        entered[vf]++;
    }

    for(int i = ans.size() - 1; i >= 1; i--)
        fout << ans[i] << " ";

    return 0;
}