Cod sursa(job #448406)

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

using namespace std;

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

#define nmax 501000

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

void citire()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d\n", &n, &m);
	char s[100];
	for (int i=1;i<=m;++i)
	{
		gets(s);
		int j=0;
		while(s[j]>='0' && s[j]<='9')
		{
			x[i]=x[i]*10+s[j]-'0';
			j++;
		}
		j++;
		while(s[j])
		{
			y[i]=y[i]*10+s[j]-'0';		
		    j++;
		}
		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 (G[i].size()&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;
	
}