Cod sursa(job #3283472)

Utilizator ArthurrrfubinacaARthur Paun Arthurrrfubinaca Data 9 martie 2025 17:34:05
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
#define NMAX 100005
#define MMAX 500005

using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

vector<pair<int , int>> g[NMAX];
vector<int> sol;
bool viz[MMAX];
int n , m;

int main()
{
    fin >> n >> m;
    for(int i = 1 ; i <= m ; i ++)
    {
        int x , y;
        fin >> x >> y;
        g[x].push_back(make_pair(y , i));
        g[y].push_back(make_pair(x , i));
    }

    for(int i = 1 ; i <= n ; i ++)
    {
        if(g[i].size() % 2)
        {

            fout << -1;
            return 0;
        }
    }

    stack<int> st;
    st.push(1);

    while(!st.empty())
    {
        int node = st.top();
        if(!g[node].empty())
        {
            int dest = g[node].back().first;
            int muchie = g[node].back().second;
            g[node].pop_back();
            if(!viz[muchie])
            {
                viz[muchie] = true;
                st.push(dest);
            }
        }
        else
        {
            st.pop();
            sol.push_back(node);
        }
    }

    sol.pop_back();

    for(auto i : sol)
    {
        fout << i << ' ';
    }
    return 0;
}