Cod sursa(job #2425464)

Utilizator flibiaVisanu Cristian flibia Data 24 mai 2019 20:35:39
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>

using namespace std;

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

struct edge {
	int x, y, id;
};

int n, m, viz[500100], x, y, st[500100], vf;
edge e[500100];
vector<pair<int, int> > v[100100];
vector<int> sol;

int main() {
	in >> n >> m;
	for (int i = 1; i <= m; i++) {
		in >> x >> y;
		e[i] = {x, y, i};
		v[x].push_back({y, i});
		v[y].push_back({x, i});
	}
	
	for (int i = 1; i <= n; i++) 
		if (v[i].size() % 2 == 1)
			return out << -1, 0;
	
	st[++vf] = 1;
	while (vf) {
		x = st[vf];
		if (v[x].size() == 0) {
			sol.push_back(x);
			vf--;
			continue;
		}
		auto it = v[x].back();
		v[x].pop_back();
		if (viz[it.second])
			continue;
		viz[it.second] = 1;
		st[++vf] = it.first;
	}
	
	for (auto it : sol)
		out << it << ' ';
	return 0;
}