Cod sursa(job #2151325)

Utilizator MaarcellKurt Godel Maarcell Data 4 martie 2018 12:55:55
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.78 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <ctime>
#include <unordered_map>
#include <iomanip>
#include <complex>
#include <cassert>
using namespace std;

#define fi first
#define se second
#define pb push_back
#define all(v) (v).begin(),(v).end()
#define deb(a) cerr<< #a << "= " << (a)<<"\n";

typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int uint;
typedef long double ld;
typedef complex<double> base;
typedef vector<int> vi;
typedef pair<int,int> pii;

template<class T> ostream& operator<<(ostream& stream, const vector<T> v){ stream << "[ "; for (int i=0; i<(int)v.size(); i++) stream << v[i] << " "; stream << "]"; return stream; }
ll fpow(ll x, ll p, ll m){ll r=1; for (;p;p>>=1){ if (p&1) r=r*x%m; x=x*x%m; } return r;}
ll inv(ll a, ll b){ return a<2 ? a : ((a-inv(b%a,a))*b+1)/a%b; }
int gcd(int a, int b){ if (!b) return a; return gcd(b,a%b);}
ll gcd(ll a, ll b){ if (!b) return a; return gcd(b,a%b);}

int N,M,st[500100],K,a[500100],T,ptr[500100]; bool v[500100];
vi g[100100],id[100100];

void euler(int start){
	st[++K]=start;
	
	while (K>0){
		int nod=st[K];

		while (ptr[nod]<g[nod].size() && v[id[nod][ptr[nod]]])
			ptr[nod]++;
		
		if (ptr[nod]==g[nod].size()){
			a[++T]=nod;
			K--;
		}
		else{
			st[++K]=g[nod][ptr[nod]];
			v[id[nod][ptr[nod]]]=1;
		}
	}
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	freopen("ciclueuler.in","r",stdin);
	freopen("ciclueuler.out","w",stdout);
	cin >> N >> M;
	
	int i;
	for (i=1; i<=M; i++){
		int x,y;
		cin >> x >> y;
		g[x].pb(y);
		g[y].pb(x);
		
		id[x].pb(i);
		id[y].pb(i);
	}
	
	euler(1);
	
	if (T<=M) cout << -1 << "\n";
	else {
		for (i=1; i<T; i++)
			cout << a[i] << " ";
	}
	
	
	return 0;
}