Cod sursa(job #2843349)

Utilizator BalasaRaduBalasa Radu BalasaRadu Data 2 februarie 2022 12:42:26
Problema Ciclu Eulerian Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>
using namespace std;

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

const int dim=1e5+9;

vector<int>v[dim];

map<pair<int,int>,int>mymap;
stack<int>stiva;
int n,m;

bool muchie(int x,int y){
    if(x>y) swap(x,y);
    return mymap[{x,y}];
}

void operatie(int x,int y,int op){
    if(x>y) swap(x,y);
    mymap[{x,y}]+=op;
}

void dfs(int x){

    stiva.push(x);

    if(stiva.size()==m){
        while(!stiva.empty()){
            fout<<stiva.top()<<' ';
            stiva.pop();
        }
        exit(0);
    }

    for(int y:v[x]){
        if(muchie(x,y)){
            operatie(x,y,-1);
            dfs(y);
            operatie(x,y, 1);
        }
    }
    stiva.pop();
}

signed main(){
        fin>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y;
        fin>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
        operatie(x,y,1);
    }
    for(int i=1;i<=n;i++){
        if(v[i].size()%2==1){
            fout<<-1;
            return 0;
        }
    }
    dfs(1);
        fout<<-1;
}