Cod sursa(job #557469)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 16 martie 2011 17:57:44
Problema Ciclu Eulerian Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

#define file_in "ciclueuler.in"
#define file_out "ciclueuler.out"

#define nmax 501001

int n,m;
int i,viz[nmax];
int x[nmax];
int y[nmax];
int nr,v[nmax];
vector<int> G[nmax];

void dfs(int nod){
	
	vector<int> :: iterator it;
	
	for (it=G[nod].begin();it!=G[nod].end();++it) 
		 if (!viz[*it]){
			 viz[*it]=1;
			 dfs(x[*it]+y[*it]-nod);
		 }
	v[++nr]=nod;
}	

int main(){
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d", &n, &m);
	for (i=1;i<=m;++i){
		scanf("%d %d", &x[i], &y[i]);
		
		G[x[i]].push_back(i);
		G[y[i]].push_back(i);
	}
	
	for (i=1;i<=n;++i)
		 if (G[i].size()&1){
			 printf("-1\n");
			 return 0;
		 }
		 nr=0;
	dfs(1);

    for (i=1;i<=nr;++i)
	        printf("%d ", v[i]);
	
	return 0;
	
}