Cod sursa(job #3359359)

Utilizator Dani111Gheorghe Daniel Dani111 Data 27 iunie 2026 13:49:59
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>
using namespace std;

int main() {
    freopen("ciclueuler.in", "r", stdin);
    freopen("ciclueuler.out", "w", stdout);
    cin.tie(0); cout.tie(0);
	ios_base::sync_with_stdio(false);

    int N, M;
    cin >> N >> M;
    vector<vector<pair<int, int>>>G(N + 3);
    vector<int>v(M);
    for(int i = 0; i < M; i++) {
        int x, y; cin >> x >> y;
        G[x].push_back({y, i}); 
        G[y].push_back({x, i});
    }
    vector<int>cycle;
    vector<int>ans;
    auto dfs = [&] (int nod, auto self) -> void{
        for(auto [ne, idx] : G[nod]) {
            if(v[idx] == 0) {
                v[idx] = 1;
                self(ne, self);
            }
        }
        ans.push_back(nod);
    };
    dfs(1, dfs);

    bool ok = 1;
    for(int i = 0; i < M; i++) {
        ok &= v[i];
    }

    for(int i = 1; i <= N; i++) {
        ok &= (G[i].size() % 2 == 0);
    }
    if(ok == 0) cout << -1;
    else {
        ans.pop_back();
        for(auto i : ans) cout << i << ' ';
    }
}