Cod sursa(job #3309034)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 31 august 2025 11:27:13
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb

#include <bits/stdc++.h>
using namespace std;

const int NMAX = 1e5;
const int MMAX = 5e5;
vector<pair<int, int>> G[NMAX + 1];
int grad[NMAX + 1];
int vis[NMAX + 1], visM[MMAX + 1];
vector<int> cycle;

void dfs(int node) {
    vis[node] = 1;
    for(auto it : G[node]) {
        int vecin = it.first;
        if(!vis[vecin]) {
            dfs(vecin);
        }
    }
}

void euler(int node) {
    while(G[node].size() > 0) {
        int vecin = G[node].back().first;
        int edge = G[node].back().second;
        G[node].pop_back();
        if(!visM[edge]) {
            visM[edge] = 1;
            euler(vecin);
        }
    }
    cycle.push_back(node);
}

int main() {
    ifstream cin("ciclueuler.in");
    ofstream cout("ciclueuler.out");
    int n, m;
    cin >> n >> m;
    for(int i = 1; i <= m; i++) {
        int a, b;
        cin >> a >> b;
        grad[a]++;
        grad[b]++;
        G[a].push_back({b, i});
        G[b].push_back({a, i});
    }
    dfs(1);
    bool ok = 1;
    for(int i = 1; i <= n; i++) {
        if(vis[i] == 0 || grad[i] % 2) {
            ok = 0;
        } 
    }
    if(ok) {
        euler(1);
        cycle.pop_back();
        for(auto it : cycle) {
            cout << it << ' ';
        }
    } else {
        cout << -1;
    }
    return 0;
}