Cod sursa(job #1621966)

Utilizator ArkinyStoica Alex Arkiny Data 29 februarie 2016 23:36:44
Problema Ciclu Eulerian Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
#include<vector>
#include<bitset>
#include<algorithm>
using namespace std;

ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");

vector<int> G[100010];
bitset<100010> viz;
int A[100010],N,M;

void DFS(int node)
{
	viz[node] = 1;

	for (int i = 0; i < G[node].size(); ++i)
		if (viz[G[node][i]] == 0)
			DFS(G[node][i]);
}

void ciclu_euler(int node)
{
	while (G[node].size())
	{
		out << node<<" ";
		int el = G[node][G[node].size() - 1];
		G[node].pop_back();
		G[el].erase(find(G[el].begin(), G[el].end(), node));
		ciclu_euler(el);
	}
}
int main()
{
	in >> N >> M;

	for (int i = 1; i <= M; ++i)
	{
		int x, y;
		in >> x >> y;
		A[x]++;
		A[y]++;
		G[x].push_back(y);
		G[y].push_back(x);
	}
	int k;
	for (int i = 1; i <= N;++i)
		if (A[i])
		{
			DFS(i);
			k = i;
			break;
		}
	for (int i = 1; i <= N;++i)
		if ((viz[i] == 0 && A[i]) || A[i] % 2 != 0)
		{
			out << -1;
			return 0;
		}
	ciclu_euler(k);
	return 0;
}