Cod sursa(job #2748370)

Utilizator Turturica_DorinTurturica Dorin Turturica_Dorin Data 30 aprilie 2021 10:42:37
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <iostream>
#include <queue>
#include <stack>
#include <string>
#include <list>
#include <assert.h>

using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
list<int>G[100005];
stack<int>st;
vector<int> rez;
int n, m, i, x, y;

int main() {
	fin >> n >> m;
	for (i = 1; i <= m; i++) {
		fin >> x >> y;
		G[x].push_back(y);
		G[y].push_back(x);
	}
	for (i = 1; i <= n; i++) {
		if (G[i].size() % 2 != 0) {
			fout << -1;
			return 0;
		}
	}
	st.push(1);
	while (st.size()) {
		while (G[st.top()].size()) {
			auto nn = G[st.top()].front();
			//erase muchie
			G[st.top()].pop_front();
			auto it = G[nn].begin();
			for (; *it != st.top() && it != G[nn].end(); ++it);
			G[nn].erase(it);

			st.push(nn);
		}
		rez.push_back(st.top());
		st.pop();
	}
	rez.pop_back();
	if (rez.size() != m) {
		fout << -1;
		return 0;
	}
	for (auto el : rez) {
		fout << el << ' ';
	}
}