Cod sursa(job #2475516)

Utilizator bogdanvladmihaiBogdan Vlad-Mihai bogdanvladmihai Data 17 octombrie 2019 00:14:36
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;

const int MAX_V = 100005;
const int MAX_M = 500005;

int n, m;

vector < pair < int, int > > G[MAX_V];
vector < int > ans;

bool vis[MAX_M];

void dfs(int u) {
  while (int(G[u].size()) > 0) {
    int v = G[u].back().first;
    int edge = G[u].back().second;
    G[u].pop_back();
    if (vis[edge] == 0) {
      vis[edge] = true;
      dfs(v);
    }
  }
  ans.push_back(u);
}

int main() {
  freopen("ciclueuler.in", "r", stdin);
  freopen("ciclueuler.out", "w", stdout);
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= m; ++i) {
    int u, v;
    scanf("%d %d", &u, &v);
    G[u].push_back({v, i});
    G[v].push_back({u, i});
  }
  bool ok = true;
  for (int i = 1; i <= n; ++i) {
    ok &= (int(G[i].size()) % 2 == 0);
  }
  if (ok == 0) {
    printf("-1\n");
    return 0;
  }
  dfs(1);
  for (int i = 0; i < ans.size() - 1; ++i) {
    printf("%d ", ans[i]);
  }
  return 0;
}