Cod sursa(job #2183397)

Utilizator flibiaVisanu Cristian flibia Data 23 martie 2018 09:39:11
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>
#define fi first
#define se second

using namespace std;

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

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

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++)
		if((int)v[i].size() & 1)
			return out << -1, 0;
	st[++vf] = 1;
	while(vf){
		x = st[vf];
		if(v[x].empty()){
			sol.push_back(x);
			vf--;
			continue;
		}
		auto nod = v[x].back();
		v[x].pop_back();
		if(!viz[nod.se]){
			viz[nod.se] = 1;
			st[++vf] = nod.fi;
		}
	}
	for(auto i : sol)
		out << i << ' ';
	return 0;
}