Cod sursa(job #2824831)

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

using namespace std;
const int nmax=int(1e5);
vector <pair<int,int>> adj[nmax];
vector <int> ans;
int elim[5*nmax+1];
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){
        scanf("%d %d ",&x,&y);
        adj[x].push_back({y,i});
        adj[y].push_back({x,i});
    }
    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][adj[nod].size()-1].second;
        if(!elim[x]){
            elim[x]=1;
            st.push(adj[nod][adj[nod].size()-1].first);
        }
        adj[nod].pop_back();
    }
    else{
    ans.push_back(nod);
    st.pop();
    }
    }
    for(auto x:ans)
        cout<<x<<" ";
}