Cod sursa(job #2170579)

Utilizator Daniel_MocsiMocsi Daniel Andrei Daniel_Mocsi Data 15 martie 2018 08:40:00
Problema Ciclu Eulerian Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <vector>
#define NMAX 100010
using namespace std;

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

struct edge {
    int val, ind;
};

int n, m, viz[NMAX];
vector<edge> G[NMAX];

int main()
{
    f >> n >> m;
    for (int i = 0, n1, n2; i < m; ++i) {
        f >> n1 >> n2;
        G[n1].push_back({n2, i});
        G[n2].push_back({n1, i});
    }
    vector<int> ans, stk;
    stk.push_back(1);
    g << 1 << ' ';
    while (!stk.empty()) {
        int nd = stk.back();
        while (!G[nd].empty() && viz[G[nd].back().ind])
            G[nd].pop_back();
        if (G[nd].empty()) {
            if (stk.back() != 1) g << stk.back() << ' ';
            stk.pop_back();
        } else {
            stk.push_back(G[nd].back().val);
            viz[G[nd].back().ind] = 1;
        }
    }
    return 0;
}