Cod sursa(job #2760949)

Utilizator RobertAcAcatrinei Robert-Marian RobertAc Data 29 iunie 2021 18:01:43
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
#define nmax 100001
#define mmax 500001
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
bool viz[mmax];
int from[mmax],to[mmax];
vector<int> graf[nmax];
int main(){
    int n,m;
    in>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y;
        in>>x>>y;
        graf[x].push_back(i);
        graf[y].push_back(i);
        from[i]=x;
        to[i]=y;
    }
    for(int i=1;i<=n;i++){
        if(graf[i].size()&1){
            out<<-1;
            return 0;
        }
    }
    vector<int> ans;
    stack<int> s;
    s.push(1);
    while(!s.empty()){
        int nod=s.top();
        if(!graf[nod].empty()){
            int e=graf[nod].back();
            graf[nod].pop_back();
            if(!viz[e]){
                viz[e]=1;
                int x= from[e]^to[e]^nod;
                s.push(x);
            }
        }else{
            s.pop();
            ans.push_back(nod);
        }
    }
    for(int i=0;i<ans.size()-1;i++){
        out<<ans[i]<<' ';
    }
}