Cod sursa(job #2700063)

Utilizator JackstilAdascalitei Alexandru Jackstil Data 26 ianuarie 2021 14:20:59
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
#define NMAX 100001
#define MMAX 500001

using namespace std;

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

int n, m, enter[MMAX], exitt[MMAX];
vector<int> graph[NMAX], stackk, ans;
bitset<MMAX> visited;


int main() {
    in >> n >> m;

    int a, b;
    for (int i = 0; i < m; ++i) {
        in >> a >> b;
        graph[a].push_back(i);
        graph[b].push_back(i);
        enter[i] = a;
        exitt[i] = b;
    }

    for (int i = 1; i <= n; ++i)
        if ((int)graph[i].size() % 2) {
            out << -1;
            return 0;
        }

    stackk.push_back(1);
    while (!stackk.empty()) {
        int node = stackk.back();

        if (!graph[node].empty()) {
            int edge = graph[node].back();
            graph[node].pop_back();

            if (!visited[edge]) {
                visited[edge] = true;
                int att = ::enter[edge] ^ ::exitt[edge] ^ node;
                stackk.push_back(att);
            }
        } else {
            stackk.pop_back();
            ans.push_back(node);
        }
    }

    for (int i = 0; i < (int)ans.size() - 1; ++i)
        out << ans[i] << ' ';
    return 0;
}