Cod sursa(job #755373)

Utilizator SmarandaMaria Pandele Smaranda Data 5 iunie 2012 15:57:49
Problema Ciclu Eulerian Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <cstdio>
#include <vector>
#include <list>
using namespace std;
vector <long> a[100001];
vector <long> :: iterator it;
list <long> q;
long e[500001];
int main () {
	long n,m,x,y,u=0,i;
	
	freopen ("ciclueuler.in","r",stdin);
	freopen ("ciclueuler.out","w",stdout);
	
	scanf("%ld%ld",&n,&m);
	for (i=1;i<=m;i++) {
		scanf("%ld%ld",&x,&y);
		a[x].push_back(y);
		a[y].push_back(x);
	}
	q.push_front(1);
	while (!q.empty()) {
		x=q.back();
		if (a[x].empty()==1) {
			e[++u]=x;
			break;
		}
		else {
			y=a[x].back();
			a[x].pop_back();
			q.push_front(y);
			for (it=a[y].begin();it!=a[y].end();++it)
				if ((*it)==x) {
					a[y].erase(it);
					break;
				}
		}
		e[++u]=x;
			q.pop_back();
	}
	u--;
	if (u!=m)
		printf("-1");
	else 
		for (i=u+1;i>=2;i--)
			printf("%ld ",e[i]);
	printf("\n");
	return 0;
}