Cod sursa(job #2723274)

Utilizator UnknownPercentageBuca Mihnea-Vicentiu UnknownPercentage Data 13 martie 2021 20:20:35
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>
 
using namespace std;

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

vector <pair <int, int>> Gr[100001];
vector <int> ans;

bitset <500001> marked;

stack <int> st;

int N, M;

int main(){
	f >> N >> M;
	for(int i = 1;i <= M;i++){
		int x, y;
		f >> x >> y;
		Gr[x].emplace_back(y, i);
		Gr[y].emplace_back(x, i);
	}

	for(int i = 1;i <= N;i++)
		if(Gr[i].size() & 1){
			g << -1;
			return 0;
		}

	st.push(1);
	while(!st.empty()){
		int v = st.top();
		while(!Gr[v].empty() && marked[Gr[v].back().second])
			Gr[v].pop_back();
		if(!Gr[v].empty()){
			marked[Gr[v].back().second] = 1;
			st.push(Gr[v].back().first);
			Gr[v].pop_back();
		}else{
			ans.emplace_back(v);
			st.pop();
		}
	}

	for(int it : ans){
		g << it << " ";
	}
}