Cod sursa(job #2178918)

Utilizator DimaTCDima Trubca DimaTC Data 19 martie 2018 20:13:01
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<bits/stdc++.h>
#define pii pair<int,int>
#define NMAX 100005
using namespace std;

int S[5*NMAX];
bool viz[5*NMAX];
vector<int>C;
vector<pii>V[NMAX];
int n,m;

int main() {
	ifstream cin("ciclueuler.in");
	ofstream cout("ciclueuler.out");
	cin>>n>>m;
	
	for (int i=1; i<=m; i++) {
		int x,y; cin>>x>>y;
		V[x].push_back({y,i});
		V[y].push_back({x,i});
	}
	
	for (int i=1; i<=n; i++) {
		if (V[i].size() & 1) {
			cout<<"-1"; return 0;
		}
	}
	
	int vf=1; S[1]=1;
	while (vf) {
		int x=S[vf];
		
		if (V[x].empty()) {
			C.push_back(x);
			vf--;
			continue;
		}
		int y=V[x][V[x].size()-1].first;
		int idx=V[x][V[x].size()-1].second;
		V[x].pop_back();
		if (!viz[idx]) {
			viz[idx]=1;
			S[++vf]=y;
		}
	}
	for (int i=0; i<C.size()-1; i++) cout<<C[i]<<" ";
	
	
	
	return 0;
}