Cod sursa(job #3357970)

Utilizator TestLicenta123Test Test TestLicenta123 Data 13 iunie 2026 22:25:00
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;

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

const int MAXN = 100001;
const int MAXM = 500001;

vector<int> adj[MAXN];
bool usedEdge[MAXM];
int degree[MAXN];
int n, m;
vector<int> cycle;

struct Edge {
    int u, v;
} edges[MAXM];

void dfs(int u) {
    while (!adj[u].empty()) {
        int e = adj[u].back();
        adj[u].pop_back();
        if (usedEdge[e]) continue;
        usedEdge[e] = true;
        int v = (edges[e].u == u) ? edges[e].v : edges[e].u;
        dfs(v);
        cycle.push_back(v);
    }
}

int main() {
    fin >> n >> m;
    for (int i = 1; i <= m; ++i) {
        fin >> edges[i].u >> edges[i].v;
        adj[edges[i].u].push_back(i);
        adj[edges[i].v].push_back(i);
        degree[edges[i].u]++;
        degree[edges[i].v]++;
    }

    for (int i = 1; i <= n; ++i) {
        if (degree[i] % 2 != 0) {
            fout << -1 << '\n';
            return 0;
        }
    }

    dfs(1);

    if ((int)cycle.size() != m) {
        fout << -1 << '\n';
        return 0;
    }

    reverse(cycle.begin(), cycle.end());
    for (int x : cycle) {
        fout << x << ' ';
    }
    fout << '\n';

    return 0;
}