Cod sursa(job #2979379)

Utilizator ioan_bogioan bogdan ioan_bog Data 14 februarie 2023 23:34:18
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <queue>
#include <stack>
#include <cstring>
using namespace std;

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

vector<pair<int, int> >v[100005];

vector<int>a;
int viz[500001];
int n, m;
int t, b;

int is_ok(int n) {

    for (int i = 1; i <= n; i++)
        if (v[i].size() % 2 == 1)
            return 0;
    return  1;
}
void Some(int node) {
    while (!v[node].empty()) {
        auto next_node=v[node].back();
        v[node].pop_back();
        if (!viz[next_node.second]) {
            viz[next_node.second] = 1;
            Some(next_node.first);
        }
    }
    a.push_back(node);

}
void solve() {
    if (!is_ok(n)) g << -1;
    else {
        Some(1);
        //stergem 1 nodul final
        a.pop_back();
        for (int i = 0; i < (int)a.size(); i++)
            g << a[i] << " ";
        g << "\n";
    }
}

void read()
{
	f >> n >>  m;
   
    for (int i = 1; i <= m; i++) {
        int t, b;
        f >> t >> b;
        v[t].push_back({ b, i });
        v[b].push_back({ t, i });
    }
    solve();
}
int main() {
    read();
}