Cod sursa(job #2195766)

Utilizator flibiaVisanu Cristian flibia Data 17 aprilie 2018 12:39:46
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 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 <pair <int, int> > v[100100];
bitset <500100> viz;
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++)
		if((int)v[i].size() & 1)	
			return out << -1, 0;
	st[++vf] = 1;
	while(vf){
		int cur = st[vf];
		if(v[cur].empty()){
			sol.push_back(cur);
			vf--;
			continue;
		}
		auto xd = v[cur].back();
		v[cur].pop_back();
		if(!viz[xd.se]){
			viz[xd.se] = 1;
			st[++vf] = xd.fi;
		}
	}
	for(auto i : sol)
		out << i << ' ';
	return 0;
}