Cod sursa(job #2976190)

Utilizator vlad_maneaManea Vlad Cristian vlad_manea Data 8 februarie 2023 16:26:54
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>

using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

stack<int> S;

vector<pair<int, int>> G[100005];
vector<int> E;

int n, m, viz[500005];

void citire() {
    fin>>n>>m;
    for (int i=0; i<m; i++) {
        int x, y;
        fin>>x>>y;
        G[x].push_back({y, i});
        G[y].push_back({x, i});
    }
}

void verif() {
    for (int i=1; i<=n; i++)
        if (G[i].size()%2!=0) {
            fout<<"-1";
            exit(0);
        }
}

void euler() {
    S.push(1);
    while (!S.empty()) {
        int x=S.top();
        if (!G[x].empty()) {
            int y=G[x].back().first;
            int ind=G[x].back().second;
            G[x].pop_back();
            if (!viz[ind]) {
                viz[ind]=1;
                S.push(y);
            }
        } else {
            S.pop();
            E.push_back(x);
        }
    }
}

void afisare() {
    E.pop_back();
    for (auto i: E)
        fout<<i<<" ";
}

int main() {
    citire();
    verif();
    euler();
    afisare();
    return 0;
}