Cod sursa(job #3333458)

Utilizator D4R1U5Sava Darius D4R1U5 Data 13 ianuarie 2026 17:06:36
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

int n,m;
vector<pair<int,int>> G[100005];
vector<bool> viz(100005, false);
vector<int> indice;
vector<int> grade;
vector<int> ciclu;

void euler(int node){
    while (G[node].empty()==false){
        int muchieVizitata=G[node].back().second;
        auto vecin=G[node].back();
        G[node].pop_back();
        if (indice[muchieVizitata]==0){
            indice[muchieVizitata]=1;
            euler(vecin.first);
        }
    }
    ciclu.push_back(node);
}

void DFS(int node){
    viz[node]=true;
    for (auto &vecin:G[node]){
        int x=vecin.first;
        if (!viz[x]){
            DFS(x);
        }
    }
}

int main(){
    f>>n>>m;

    indice.resize(m+1, 0);
    grade.resize(n+1, 0);

    for (int i=1;i<=m;i++){
        int nod1, nod2;
        f>>nod1>>nod2;
        G[nod1].push_back({nod2,i});
        G[nod2].push_back({nod1,i});
        grade[nod1]++;
        grade[nod2]++;
    }

    DFS(1);
    bool ok=true;
    for(int i=1;i<=n;i++) {
        if(!viz[i] || grade[i]%2==1) {
            ok=false;
        }
    }

    if (ok==false){
        g<<-1;
    }
    else {
        euler(1);
        for (int i=0;i<=ciclu.size();i++){
            g<<ciclu[i]<<" ";
        }
    }
}