Cod sursa(job #751053)

Utilizator ChallengeMurtaza Alexandru Challenge Data 24 mai 2012 00:04:54
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <vector>
#include <stack>

using namespace std;

const char InFile[]="ciclueuler.in";
const char OutFile[]="ciclueuler.out";
const int MaxN=100111;
const int MaxM=500111;

ifstream fin(InFile);
ofstream fout(OutFile);

int N,M,x,y,D[MaxN];
vector<int> G[MaxN];
stack<int> S;

inline bool Euler()
{
	for(register int i=1;i<=N;++i)
	{
		if(D[i]&1)
		{
			return false;
		}
	}
	
	S.push(1);
	while(!S.empty())
	{
		int nod=S.top();
		if(G[nod].size()==0)
		{
			if(S.size()>1)
			{
				fout<<nod<<" ";
			}
			S.pop();
		}
		else
		{
			int e=G[nod].back();
			G[nod].pop_back();
			S.push(e);
			for(register int i=0;i<G[e].size();++i)
			{
				if(G[e][i]==nod)
				{
					G[e][i]=G[e].back();
					G[e].pop_back();
					break;
				}
			}
		}
	}
	
	return true;
}

int main()
{
	fin>>N>>M;
	for(register int i=1;i<=M;++i)
	{
		fin>>x>>y;
		G[x].push_back(y);
		G[y].push_back(x);
		++D[x];
		++D[y];
	}
	fin.close();
	
	if(!Euler())
	{
		fout<<"-1";
	}
	fout.close();
	return 0;
}