Cod sursa(job #2824824)

Utilizator SeracovanuEdwardSeracovanu Edward SeracovanuEdward Data 3 ianuarie 2022 16:01:32
Problema Ciclu Eulerian Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;
const int nmax=int(1e5);
vector <int> adj[nmax],ans;
vector <pair<int,int>> M;
vector <bool> elim;
int n,m;
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){
        cin>>x>>y;
        M.push_back({x,y});
        elim.push_back(0);
        adj[x].push_back(i-1);
        adj[y].push_back(i-1);
    }
    for(int i=1;i<=n;++i)
    if(adj[i].size()%2==1){
        cout<<"-1";
        return 0;
    }
    stack <int> st;
    st.push(1);
    while(!st.empty()){
    int nod=st.top();
    if(adj[nod].size()){
        int x=adj[nod].back();
        adj[nod].pop_back();
        if(!elim[x]){
            elim[x]=1;
            int p=M[x].second;
            if(p==nod)
                p=M[x].first;
            st.push(p);
        }
    }
    else{
    ans.push_back(nod);
    st.pop();
    }
    }
    ans.pop_back();
    for(auto x:ans)
        cout<<x<<" ";
}