Cod sursa(job #270146)

Utilizator sory1806Sandu Sorina-Gabriela sory1806 Data 3 martie 2009 19:40:06
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<stdio.h>
#define nmax 100010
#define mmax 500010
long s[mmax], vz[nmax], n, m;
struct elem
{       long vf;
	elem *urm;
}	*a[nmax], *q;
FILE *f, *g;

int read()
{	long gr[nmax], i, x, y;
	fscanf(f, "%ld%ld", &n, &m);
	for(i=1; i<=n; i++)
		gr[i]=0;
	for(i=1; i<=m; i++)
	{	fscanf(f, "%ld%ld", &x, &y);
		gr[x]++; gr[y]++;
		q=new elem;
		q->vf=y; q->urm=a[x];
		a[x]=q;
		q=new elem;
		q->vf=x; q->urm=a[y];
		a[y]=q;
	}
	for(i=1; i<=n; i++)
		if(gr[i]%2==1)
			return 0;
	return 1;
}

void df1(long z, long k)
{       elem *q;
	s[k]=z;
	vz[z]=1;
	for(q=a[z]; q; q=q->urm)
		if(!vz[q->vf])
			df1(q->vf, k+1);
}

int check()
{	long i;
	df1(1, 1);
	for(i=1; i<=n; i++)
		if(vz[i]==0)
			return 0;
	return 1;
}

void solve()
{
}

int main()
{
	f=fopen("ciclueuler.in", "r");
	g=fopen("ciclueuler.out", "w");
	if(read())
		if(check())
			solve();
		else
			fprintf(g, "-1\n");
	else
			fprintf(g, "-1\n");

	return 0;
}