Cod sursa(job #2668820)

Utilizator florinrafiliuRafiliu Florin florinrafiliu Data 5 noiembrie 2020 15:30:47
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

const int max_v = (int)5e5 + 5;
const int max_n = (int)1e5 + 5;

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

struct edge {
  int v, ind;
};

vector<edge> g[max_n];

vector<int> ans;

vector<bool> visited(max_v);

void dfs(int u)
{
    while((int)g[u].size() > 0) {
        edge ed = g[u][(int)g[u].size() - 1];
        g[u].pop_back();
        int v = ed.v, i = ed.ind;
        if (!visited[i]) {
            visited[i] = true;
            dfs(v);
        }
    }
    ans.push_back(u);
}

int main()
{
    int n, m; fin >> n >> m;
    for (int i = 0; i < m; ++i) {
        int u, v; fin >> u >> v;
        g[u].push_back({v, i});
        g[v].push_back({u, i});
    }
    int ok = 0;
    for(int i = 1; i <= n; ++i)
    {
        if((int)g[i].size() % 2 == 1)
            ok = 1;
    }
    if(ok == 1)
        fout << -1;
    else {
        dfs(1);
        for(int i = 1; i <= n; ++i) {
            if(!visited[i])
                ok = 1;
        }
        if(ok == 1)
            fout << -1;
        else{
            for (int i = 0; i < (int)ans.size()-1; ++i) {
                fout << ans[i] << " ";
            }
        }
    }
    return 0;
}