Cod sursa(job #2156592)

Utilizator flibiaVisanu Cristian flibia Data 8 martie 2018 20:38:52
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#pragma GCC optimize("03")
#include <bits/stdc++.h>
#define N 100100

using namespace std;

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

int n, m, x, y, vf, st[5 * N];
vector <pair <int, int> > v[N];
bool viz[5 * N], flag;
vector <int> sol;

int main(){
	in >> n >> m;
	for(int i = 1; i <= m; i++){
		in >> x >> y;
		v[x].push_back({y, i});
		v[y].push_back({x, i});
	}
	for(int i = 1; i <= n; i++)
		flag |= (v[i].size() & 1);
	if(flag)
		return out << -1, 0;
	st[++vf] = 1;
	while(vf){
		x = st[vf];
		if(v[x].empty()){
			sol.push_back(x);
			vf--;
		} else{
			auto w = v[x].back();
			v[x].pop_back();
			if(!viz[w.second]){
				viz[w.second] = 1;
				st[++vf] = w.first;
			}	
		}
	}
	for(auto i : sol)
		out << i << ' ';
	return 0;
}