Cod sursa(job #495936)

Utilizator Cristy94Buleandra Cristian Cristy94 Data 27 octombrie 2010 11:49:41
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <algorithm>
#include <fstream>
#include <vector>
using namespace std;
int c[500003];
int ce[500005];
vector<int> a[100001];
int p = 1, u = 1, nr,k;
void ciclu(int x)
{	bool ok = true;
	int nr=x;
do	{for (int i = 0; (size_t) i < a[x].size() && ok; i++)
		{		u++,c[u] = a[x][i];							
				int z = a[x][i];				
				vector<int>::iterator j = find(a[z].begin(), a[z].end(), x);
				a[z].erase(j),a[x].erase(a[x].begin()),x = z;				
				break;
		}			
	} while (x!=nr);
	ce[++k]=x;
u--;	
}
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int main()
{	int N, M;
	in >> N >> M;
	for (int i = 1; i <= M; i++)
	{	int x, y;
		in >> x >> y;		
		a[x].push_back(y),a[y].push_back(x);
	}	
	for (int i = 1; i <= N; i++)
		if (a[i].size() % 2 )
		{	out << -1;return 0;}
	u=0,c[u]=1,k=0;
do	
		if (a[c[u]].size() > 0)	ciclu(c[u]);		
		else	ce[++k]=c[u],u--;
while (u>0);
	if(k!=M){out << -1;	return 0;}
	for (int i = 1; i <= k; i++)
		out << ce[i] << ' ';
return 0;
}