Cod sursa(job #1958045)

Utilizator flibiaVisanu Cristian flibia Data 7 aprilie 2017 22:54:54
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define st first
#define nd second

using namespace std;

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

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

int main(){
	in >> n >> m;
	for(int i = 1; i <= m; i++){
		in >> x >> y;
		v[x].pb(mp(y, i));
		v[y].pb(mp(x, i));
	} 
	for(int i = 1; i <= n; i++) if(v[i].size() & 1) return out << -1, 0;
	stack <int> st;
	st.push(1);
	while(!st.empty()){
		x = st.top();
		if(v[x].empty()){
			sol.pb(x);
			st.pop();
		} else{
			pair <int, int> p = v[x].back();
			v[x].pop_back();
			if(!viz[p.nd]){
				viz[p.nd] = 1;
				st.push(p.st);
			}
		}
	}
	for(auto it : sol) out << it << ' ';
	return 0;
}