Cod sursa(job #394273)

Utilizator GotenAmza Catalin Goten Data 10 februarie 2010 18:13:00
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<fstream.h>

int sol[500100],ver[1000100],leg[1000100],pus[1000100],start[100100],q,k,st[500100];

int main()
{
	int n,m,i,x,y,t;
	ifstream f("ciclueuler.in");
	ofstream g("ciclueuler.out");
	f>>n>>m;
	for(i=1;i<=m;i++)
	{
		f>>x>>y;
		ver[++q]=y;
		leg[q]=start[x];
		start[x]=q;
		ver[++q]=x;
		leg[q]=start[y];
		start[y]=q;
	}
	q=0;
	st[++k]=1;
	while(k)
	{
		t=start[st[k]];
		if(t)
		{
			start[st[k]]=leg[t];
			if(!pus[t])
			{
				pus[t]=1;
				if(t%2)
					pus[t+1]=1;
				else
					pus[t-1]=1;
				st[++k]=ver[t];
			}
		}
		else
			sol[++q]=st[k--];
	}
	for(i=1;i<=2*m;i++)
		if(!pus[i])
		{
			g<<"-1";
			return 0;
		}
	for(i=1;i<q;i++)
		g<<sol[i]<<' ';
	return 0;
}