Cod sursa(job #2965884)

Utilizator CristeaCristianCristea Cristian CristeaCristian Data 16 ianuarie 2023 15:14:30
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <vector>
#include <stack>

#define pb push_back
#define x first
#define y second
using namespace std;
using pi=pair<int, int>;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
vector<vector<pi>> v;
vector<int> vis;
int main()
{
    int n, m, i, a, b;
    cin >> n >> m;
    v.resize(n + 1);
    vis.resize(m + 1);
    for(i = 1; i <= m; i++)
    {
        cin >> a >> b;
        v[a].pb({b, i});
        v[b].pb({a, i});
    }
    for(i = 1; i <= n; i++)
        if(v[i].size() % 2)
        {
            cout << -1;
            return 0;
        }
    stack<int> st;
    vector<int> ans;
    st.push(1);
    while(!st.empty())
    {
        int u = st.top();
        if(v[u].size())
        {
            pi e = v[u].back();
            v[u].pop_back();
            if(!vis[e.y])
            {
                vis[e.y] = 1;
                st.push(e.x);
            }
        }
        else
        {
            st.pop();
            ans.pb(u);
        }
    }
    for(i = 0; i < ans.size() - 1; i++)
        cout << ans[i] << ' ';
    return 0;
}