Cod sursa(job #3005150)

Utilizator VladS23Vlad Seba VladS23 Data 16 martie 2023 19:47:25
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <vector>
#include <stack>

using namespace std;

ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");

const int NMAX = 1e5;
const int MMAX = 5e5;

int n, m;

pair<int, int> muchii[MMAX + 5];
vector<vector<int>> edges;
vector<int> sol;
int viz[MMAX + 5];

void euler()
{
    stack<int> st;
    st.push(1);
    while (!st.empty())
    {
        int node = st.top();
        if (!edges[node].empty())
        {
            int x = edges[node].back();
            edges[node].pop_back();
            if (!viz[x])
            {
                st.push({(muchii[x].first == node) ? muchii[x].second : muchii[x].first});
                viz[x] = 1;
            }
        }
        else
        {
            st.pop();
            sol.push_back(node);
        }
    }
}
int main()
{
    cin >> n >> m;
    edges.resize(n + 1);
    for (int i = 1; i <= m; i++)
    {
        int a, b;
        cin >> a >> b;
        edges[a].push_back(i);
        edges[b].push_back(i);
        muchii[i] = {a, b};
    }
    euler();
    for (int i = 0; i < sol.size() - 1; i++)
        cout << sol[i] << ' ';
    return 0;
}