Cod sursa(job #3195500)

Utilizator UengineDavid Enachescu Uengine Data 20 ianuarie 2024 23:41:17
Problema Ciclu Eulerian Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>

using namespace std;

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

struct edge{
    int nod1;
    int nod2;
};

vector < vector<int> > graph;
vector <edge> edges;
vector <int> euler;
vector <bool> deleted;

int get_next(int node){
    while (!graph[node].empty() and deleted[graph[node].back()]){
        graph[node].pop_back();
    }
    if(graph[node].empty())
        return 0;
    int index = graph[node].back();
    deleted[index] = true;
    edge muchie = edges[index];
    return muchie.nod1 + muchie.nod2 - node;
}

void find_euler(int node){
    while(int next = get_next(node))
        find_euler(next);
    euler.push_back(node);
}

int main() {
    int n, m;
    cin >> n >> m;
    graph.resize(n + 5);
    deleted.resize(n + 5);
    for (int i = 0; i < m; ++i) {
        int x, y;
        cin >> x >> y;
        edges.push_back({x, y});
        graph[x].push_back(edges.size() - 1);
        graph[y].push_back(edges.size() - 1);
    }
    find_euler(1);
    for (int nodcrt : euler) {
        cout << nodcrt << ' ';
    }
    return 0;
}