Cod sursa(job #2681276)

Utilizator CyborgSquirrelJardan Andrei CyborgSquirrel Data 5 decembrie 2020 11:06:13
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <set>

using namespace std;

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

int n, m;
multiset<int> gra[100041];
int grad[100041];

int nxt = 0;

void defeseta(int a=1){
	while(!gra[a].empty()){
		int b = *gra[a].begin();
		gra[a].erase(gra[a].begin());
		gra[b].erase(gra[b].find(a));
		defeseta(b);
	}
	
	if(nxt != 0)fout << nxt << " ";
	nxt = a;
}

int main(){
	// ios_base::sync_with_stdio(false);
	fin >> n >> m;
	for(int i = 0; i < m; ++i){
		int a, b;fin>> a >> b;
		gra[a].insert(b);grad[a]++;
		gra[b].insert(a);grad[b]++;
	}
	
	bool ok = true;;
	for(int i = 1; i <= n; ++i){
		if(grad[i]%2 != 0){
			ok = false;
			break;
		}
	}
	
	if(ok)defeseta();
	else fout << -1;
	return 0;
}