Cod sursa(job #2837309)

Utilizator domistnSatnoianu Dominic Ioan domistn Data 22 ianuarie 2022 09:28:13
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <vector>
#include <stack>

#define NMAX 100005
#define MMAX 500005

using namespace std;

struct muchie {
    int x, y, neutru;
    bool used;
} a[MMAX];

int n, m;
stack<int> adj[NMAX];
vector<int> ans;

int main()
{
    freopen("ciclueuler.in", "r", stdin);
    freopen("ciclueuler.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(int i = 1, x, y; i <= m; ++i) {
        scanf("%d%d", &x, &y);
        a[i] = {x, y, x ^ y, 0};
        adj[x].push(i);
        adj[y].push(i);
    }

    stack<int> st;
    st.push(1);
    while(!st.empty()) {
        int nod = st.top();
        if(!adj[nod].empty()) {
            int muchie = adj[nod].top();
            adj[nod].pop();
            if(!a[muchie].used) {
                a[muchie].used = 1;
                st.push(a[muchie].neutru ^ nod);
            }
        } else {
            ans.push_back(nod);
            st.pop();
        }
    }

    for(int i = 0; i < ans.size() - 1; ++i)
        printf("%d ", ans[i]);
    return 0;
}