Cod sursa(job #448397)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 3 mai 2010 18:05:14
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#include <vector>
#include <cstring>

using namespace std;

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

#define nmax 101000

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

void citire()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d", &n, &m);
	
	for (int i=1;i<=m;++i)
	{
		scanf("%d %d", &x[i], &y[i]);
		grad[x[i]]++;
		grad[y[i]]++;
		G[x[i]].push_back(i);
		G[y[i]].push_back(i);
	}
}

inline 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;
}




void solve()
{
	nr=0;
	for (int i=1;i<=n;++i)
		 if (grad[i]&1)
		 {
			 printf("-1\n");
			 exit(0);
		 }
		 
	dfs(1);
	
	for (int i=1;i<=nr;++i) printf("%d ", v[i]);
}

int main()
{
	citire();
	solve();
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}