Cod sursa(job #1814036)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 23 noiembrie 2016 16:51:45
Problema Ciclu Eulerian Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax = 1e5 + 10;

int n, m;
vector < int > ans, g[nmax];

void input() {
    scanf("%d %d", &n, &m);
    for (int i = 1; i <= m; ++i) {
        int x, y;
        scanf("%d %d", &x, &y);

        g[x].push_back(y);
        g[y].push_back(x);
    }
}

void solve() {
    stack < int > s; s.push(1);
    while ((int)s.size()) {
        int node = s.top();

        if ((int)g[node].size() == 0)
            s.pop(), ans.push_back(node);
        else {
            int to = g[node].back();
            s.push(to);

            g[node].pop_back();
            for (int i = 0; i < (int)g[to].size(); ++i)
                if (g[to][i] == node) {
                    g[to].erase(g[to].begin()+i);
                    break;
                }
        }
    }

    ans.pop_back();
}

void output() {
    for (auto &it : ans) printf("%d ", it);
}

int main()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);

    input();
    solve();
    output();

    return 0;
}