Cod sursa(job #751814)

Utilizator Marius96Marius Gavrilescu Marius96 Data 27 mai 2012 00:07:46
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<cstdio>
#include<set>
using std::multiset;

multiset<int> v[100005];
bool     d[100005];
bool     p[100005];
bool isfirst=true;

void euler (int x)
{
	bool first=isfirst;
	isfirst=false;
	while(!v[x].empty()){
		int w=*v[x].begin();
		//if(x!=w)
		v[w].erase (v[w].find (x));
		v[x].erase (v[x].begin());
		euler (w);
	}
	if(!first)
		printf ("%d ",x);
}

void dfs (int x)
{
	p[x]=1;
	for(multiset<int>::iterator it=v[x].begin();it!=v[x].end();it++)
		if(!p[*it])
			dfs (*it);
}

int main()
{
	freopen ("ciclueuler.in","r",stdin);
	freopen ("ciclueuler.out","w",stdout);
	int n,m;
	scanf ("%d%d",&n,&m);
	while(m--){
		int x,y;
		scanf ("%d%d",&x,&y);
		v[x].insert (y);
		v[y].insert (x);
		d[x]^=1;
		d[y]^=1;
	}
	dfs (1);
	for(int i=1;i<=n;i++)
		if(d[i]||!p[i]){
			puts ("-1");
			return 0;
		}
	euler (1);
	return 0;
}