Cod sursa(job #3329776)

Utilizator ceezarGrecu Cezar Gabriel ceezar Data 15 decembrie 2025 17:39:49
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m;
vector<pair<int,int>>L[100002];
stack<int>st;
bool muchii[500002];
vector<int>ciclu;
void euler(int nod)
{
    st.push(nod);
    while(!st.empty())
    {
        int v=st.top();
        if(!L[v].empty())
        {
            pair<int,int>leg;
            leg=L[v].back();
            L[v].pop_back();
            if(muchii[leg.second]==0)
            {
                st.push(leg.first);
                muchii[leg.second]=1;
            }
        }
        else
        {
            ciclu.push_back(v);
            st.pop();
        }

    }
}

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

    for(int i=1;i<=n;++i)
        if(L[i].size()%2==1)
        {
            fout<<-1;
            return 0;
        }
    euler(1);
    for(int i=0;i<ciclu.size()-1;++i)
        fout<<ciclu[i]<<' ';
}