Cod sursa(job #3341369)

Utilizator ankaramessiankaramessi ankaramessi Data 19 februarie 2026 11:37:19
Problema Ciclu Eulerian Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define pb push_back

const int NMAX = 1e5 + 5;

int grad[NMAX];
multiset <pair<int, int>> g[NMAX];

vector <int> ciclu;

void euler (int node) {
    while (!g[node].empty()) {
        auto it = g[node].begin();
        int v = it->first, idx = it->second;
        g[node].erase(it);
        g[v].erase(g[v].find({node, idx}));
        euler(v);
    }
    ciclu.pb(node);
}

int main() {
    ifstream cin("ciclueuler.in");
    ofstream cout("ciclueuler.out");
    ios::sync_with_stdio(false), cin.tie(0);
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= m; i++) {
        int x, y;
        cin >> x >> y;
        g[x].insert({y, i});
        grad[x]++, grad[y]++;
        g[y].insert({x, i});
    }

    euler(1);
    if (ciclu.size() == m + 1) for (int i = 0; i < ciclu.size() - 1; i++) cout << ciclu[i] << " ";
    else cout << -1;
    return 0;
}