Cod sursa(job #1923266)

Utilizator mariapascuMaria Pascu mariapascu Data 10 martie 2017 21:54:48
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <vector>
using namespace std;

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

const int MaxM = 500005;

int n, m;
vector<vector<int>> G;
vector<pair<int, int>> E;
vector<int> sol;
vector<bool> viz;

void Read();
void DF(int i);
void Write();

int main() {
    Read();
    for (int i = 1; i <= n; i++)
        if (G[i].size() % 2 == 1) {
            fout << "-1";
            fin.close();
            fout.close();
            return 0;
        }
    DF(1);
    Write();

    fin.close();
    fout.close();
    return 0;
}

void DF(int i) {
    for (const auto & y : G[i])
        if (!viz[y]) {
            viz[y] = true;
            DF(E[y].first + E[y].second - i);
        }
    sol.push_back(i);
}

void Write() {
    for (int i = 0; i < sol.size() - 1; i++)
        fout << sol[i] << ' ';
}

void Read() {
    fin >> n >> m;
    G = vector<vector<int>>(n + 1);
    E = vector<pair<int, int>>(m + 1);
    viz = vector<bool>(m + 1);
    int x, y;
    for (int i = 1; i <= m; i++) {
        fin >> x >> y;
        G[x].push_back(i);
        G[y].push_back(i);
        E[i] = {x, y};
    }
}