Cod sursa(job #3309294)

Utilizator vlad7654vladimir manescu vlad7654 Data 3 septembrie 2025 14:11:49
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.54 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int MMAX=5e5, NMAX=1e5;
vector<int> graph[MMAX+5], ciclu;
vector<pair<int,int> > muchii(MMAX+5);
vector<bool> used(NMAX+5), used_edge(MMAX+5);
int n, m;
void dfs_euler(int nod){
    stack<int> s;
    s.push(nod);
    while(!s.empty()){
        nod=s.top();
        if(graph[nod].size()){
            int vecin=graph[nod].back();
            graph[nod].pop_back();
            if(used_edge[vecin]==0){
                used_edge[vecin]=1;
                int index_vecin=muchii[vecin].first^muchii[vecin].second^nod;
                s.push(index_vecin);
            }
        }else{
            s.pop();
            ciclu.push_back(nod);
        }
    }
}
void dfs(int nod){
    used[nod]=1;
    for(auto it:graph[nod]){
        int next=muchii[it].first^muchii[it].second^nod;
        if(used[next]==0){
            dfs(next);
        }
    }
}

int main(){
    fin>>n>>m;
    for(int i=1;i<=m;i++){
        int x, y;
        fin>>x>>y;
        graph[x].push_back(i);
        graph[y].push_back(i);
        muchii[i].first=x;
        muchii[i].second=y;
    }
    dfs(1);
    for(int i=1;i<=n;i++){
        if(used[i]==0){
            fout<<-1;
            return 0;
        }
    }
    for(int i=1;i<=n;i++){
        if(graph[i].size()%2==1){
            four<<-1;
            return 0;
        }
    }
    dfs_euler(1);
    for(int i=0;i<ciclu.size()-1;i++){
        fout<<ciclu[i]<<' ';
    }
}