Cod sursa(job #2950406)

Utilizator oskar01oskar the boss oskar01 Data 3 decembrie 2022 17:35:57
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#include <vector>
#include <bitset>
#include <unordered_map>
#include <set>

using namespace std;

ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");

struct Info {
    int node1;
    int edgeId;
};

int n,m;
vector<vector<Info>> graph;
vector<int> nodeGradImpar;
vector<bitset<1>> vis;
vector<int> path;

void read() {
    cin>>n>>m;
    graph.resize(n+1);
    int a,b;
    for(int i=1;i<=m;i++) {
        cin>>a>>b;
        graph[a].push_back({b,i});
        graph[b].push_back({a,i});
    }
}

void tractoreala(int node) {
    while(!graph[node].empty() && vis[graph[node].back().edgeId]==1) {
        graph[node].pop_back();
    }
}

void dfs(int node) {
    path.push_back(node);
    while(!graph[node].empty()) {
        tractoreala(node);
        if(graph[node].empty()) {
            return;
        }
        vis[graph[node].back().edgeId]=1;
        dfs(graph[node].back().node1);
    }
}

void solve() {
    int cntGradImpar=0;
    for(int i=1;i<=n;i++) {
        if(graph[i].size()%2==1) {
            cntGradImpar++;
        }
    }
    if(cntGradImpar>0) {
        cout<<"-1\n";
        return;
    }
    vis.resize(m+1);
    vis[1]=1;
    dfs(1);
    for(auto it:path) {
        cout<<it<<" ";
    }
}

int main() {
 
    read();
    solve();
    return 0;
}