Cod sursa(job #3268705)

Utilizator MrPuzzleDespa Fabian Stefan MrPuzzle Data 16 ianuarie 2025 19:30:17
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>

#define DIM 100000

#define int long long

#define pii pair<int,int>

using namespace std;

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

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

int n,m;
int x,y;

vector<pii> L[DIM+5];
int D[DIM+5];

int k;
int s[5*DIM+5];

bool u[5*DIM+5];

int sol[5*DIM+5];
int solk = 0;

signed main(){

    f>>n>>m;
    for(int i=1;i<=m;i++){
        f>>x>>y;

        L[x].push_back({y,i});
        L[y].push_back({x,i});

        u[i] = 1;

        D[x]++;D[y]++;
    }

    for(int i=1;i<=n;i++){
        if(D[x]%2 == 1){
            g<<-1;
            return 0;
        }
    }

    k = 1;
    s[k] = 1;
    while(k>0){

        int nod = s[k];

        if(D[nod] == 0){
            sol[++solk] = nod;
            k--;
        }else{

            while(u[L[nod][L[nod].size()-1].second] == 0){
                L[nod].pop_back();
            }

            pii vec = L[nod][L[nod].size()-1];
            u[vec.second] = 0;

            D[nod]--;D[vec.first]--;

            s[++k] = vec.first;
        }
    }

    for(int i=1;i<solk;i++){
        g<<sol[i]<<" ";
    }


    return 0;
}