Cod sursa(job #653886)

Utilizator geniucosOncescu Costin geniucos Data 29 decembrie 2011 11:02:36
Problema Ciclu Eulerian Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<stdio.h>
using namespace std;
int k,i,m,n,x[500002],a[500002],b[500002],ap[100002];
int valid(int k)
{
	if(ap[x[k]]>1) return 0;
	if(b[x[k-1]]!=a[x[k]]&&k>1) return 0;
	if(k==m&&b[x[k]]!=a[x[1]]) return 0; 
	return 1;
}
void back()
{
	k=1;
	x[k]=0;
	ap[0]=1;
	while(k>0)
	{
		while(x[k]<m&&k<=m)
		{
			x[k]++;
			ap[x[k]-1]--;
			ap[x[k]]++;
			if(valid(k))
			{
				if(k==m)
				{
					printf("%d %d ",a[x[1]],b[x[1]]);
					for(i=2;i<=m;i++)
						printf("%d ",b[x[i]]);
				}
				else
				{
					k++;
					x[k]=0;
					ap[0]++;
				}
			}
		}
		ap[x[k]]--;
		k--;
	}
	printf("-1\n");
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d",&n);
scanf("%d",&m);
for(i=1;i<=m;i++)
{
	scanf("%d",&a[i]);
	scanf("%d",&b[i]);
}
back();
return 0;
}