Cod sursa(job #2979359)

Utilizator ioan_bogioan bogdan ioan_bog Data 14 februarie 2023 23:02:34
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 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;
vector<int>::iterator k;
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();
}