Cod sursa(job #2817878)

Utilizator ElizaTElla Rose ElizaT Data 14 decembrie 2021 14:27:04
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 1e5,MMAX = 5e5;
pair <int, int> edges[MMAX + 5];
vector<int> edge[NMAX + 5];
bool viz[MMAX + 5];
stack <int> st;
vector <int> ans;

int main()
{
    ifstream fin("ciclueuler.in");
    ofstream fout("ciclueuler.out");
    int n,m,a,b;
    fin >> n >> m;
    for (int i = 1;i <= m;i++) {
        fin >> a >> b;
        edge[a].push_back(i);
        edge[b].push_back(i);
        edges[i] = {a, b};
    }
    for (int i = 1;i <= n;i++)
        if (edge[i].size() % 2) {
            fout << -1;
            return 0;
        }
    st.push(1);
    while (!st.empty()) {
        a = st.top();
        if (!edge[a].empty()) {
            b = edge[a].back();
            edge[a].pop_back();
            if(!viz[b]) {
                viz[b] = 1;
                st.push(edges[b].first ^ edges[b].second ^ a);
            }
        }
        else {
            ans.push_back(a);
            st.pop();
        }
    }
    for (int i = 0;i < ans.size() - 1;i++)
        fout << ans[i] << " ";
    return 0;
}