Cod sursa(job #727810)

Utilizator algotrollNume Fals algotroll Data 28 martie 2012 12:04:29
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<fstream>
#include<set>
#include<stack>
#include<vector>
#define _NM 100005
using namespace std;

int main()
{
	ifstream fin("ciclueuler.in");
	ofstream fout("ciclueuler.out");
	int nN,nM;
	fin>>nN>>nM;
	static multiset<int> sAd[_NM];
	for (int i=1;i<=nM;i++)
	{
		int nod1,nod2;
		fin>>nod1>>nod2;
		sAd[nod1].insert(nod2);
		sAd[nod2].insert(nod1);
	}
	for (int i=1;i<=nN;i++)
		if (sAd[i].size()%2!=0)
		{
			fout<<-1;
			return 0;
		}
	//
	stack<int> s;
	vector<int> sol;
	s.push(1);
	while(!s.empty())
	{
		int cur=s.top();
		if (sAd[cur].size()==0)
		{
			sol.push_back(cur);
			s.pop();
		}
		else
		{
			int nnod=*sAd[cur].begin();
			sAd[cur].erase(sAd[cur].begin());
			sAd[nnod].erase(sAd[nnod].find(cur));
			s.push(nnod);
		}
	}
	for (unsigned i=0;i<sol.size()-1;i++)
		fout<<sol[i]<<' ';
	return 0;
}