Cod sursa(job #2722852)

Utilizator beingsebiPopa Sebastian beingsebi Data 13 martie 2021 12:36:49
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
// #define f cin
// #define g cout
// code-runner.runInTerminal
vector<vector<pair<int, int>>> v;
vector<bool> bif;
stack<int> st;
vector<int> rez;
int n, m;
int main()
{
    f >> n >> m;
    v.resize(n + 1);
    bif.resize(m + 1);
    for (int i = 1, x, y; i <= m; i++)
    {
        f >> x >> y;
        v[x].emplace_back(y, i);
        v[y].emplace_back(x, i);
    }
    for (int i = 1; i <= n; i++)
        if (v[i].size() & 1)
        {
            g << -1;
            return 0;
        }
    st.push(1);
    while (!st.empty())
    {
        int ac = st.top();
        if (v[ac].empty())
        {
            rez.push_back(ac);
            st.pop();
        }
        else
        {
            if (bif[v[ac].back().second])
                v[ac].pop_back();
            else
            {
                auto ne = v[ac].back();
                st.push(ne.first);
                v[ac].pop_back();
                bif[ne.second] = 1;
            }
        }
    }
    if ((int)rez.size() != m + 1)
        g << -1;
    else
        for (auto it = rez.rbegin(); it != rez.rend(); it++)
            g << *it << " ";

    return 0;
}