Cod sursa(job #2544243)

Utilizator T_george_TGeorge Teodorescu T_george_T Data 11 februarie 2020 21:06:03
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int NMAX=100004,MMAX=500004;
vector<int>g[NMAX],ans,st;
bool used[MMAX];
int n,m,from[MMAX],to[NMAX];
int main()
{
    in>>n>>m;
    for(int i=1,a,b;i<=m;i++){
        in>>a>>b;
        g[a].push_back(i);
        g[b].push_back(i);
        from[i]=a;
        to[i]=b;
    }
    for(int i=1;i<=n;i++){
        if(g[i].size()&1){
            out<<-1;
        return 0;}
    }
    st.push_back(1);
    int node;
    while(!st.empty()){
            node=st.back();
       if(!g[node].empty()){
          int e=g[node].back();
          g[node].pop_back();
          if(!used[e]){
            used[e]=1;
            int dest=from[e]^to[e]^node;
            st.push_back(dest);
          }
       }
       else{
       st.pop_back();
       ans.push_back(node);
       }
    }
    for(int i=0;i<ans.size()-1;i++)
        out<<ans[i]<<" ";
    return 0;
}