Cod sursa(job #2302636)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 14 decembrie 2018 22:08:15
Problema Ciclu Eulerian Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <cmath>
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <set>
#include <map>
#include <list>
#include <time.h>
#include <math.h>
#include <random>
#include <deque>
#include <queue>
#include <cassert>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <bitset>
#include <sstream>
#include <chrono>
#include <cstdio>

using namespace std;

const int N = 100000 + 5;
const int M = 500000 + 5;

int n, m;
int x[M], y[M];
bool seen[M];
vector <int> id[N];

vector <int> way;

void dfs(int nod)
{
    while (!id[nod].empty())
    {
        int i = id[nod].back();
        id[nod].pop_back();
        if (seen[i] == 0)
        {
            seen[i] = 1;
            dfs(x[i] + y[i] - nod);
        }
    }
    way.push_back(nod);
}

int main()
{
    freopen ("ciclueuler.in", "r", stdin);
    freopen ("ciclueuler.out", "w", stdout);
    cin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        cin >> x[i] >> y[i];
        id[x[i]].push_back(i);
        id[y[i]].push_back(i);
    }
    dfs(1);
    way.pop_back();
    for (auto &x : way)
    {
        cout << x << " ";
    }
    cout << "\n";
}