Cod sursa(job #2692094)

Utilizator cristia_razvanCristia Razvan cristia_razvan Data 31 decembrie 2020 14:43:29
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

int  n, m;
vector<pair<int, int> > edge[100001];
vector<int> ans;
bitset<100001> viz;

void DFS(int nod)
{
	while (!edge[nod].empty())
	{
		pair<int, int> nac = edge[nod].back();
		edge[nod].pop_back();
		if (!viz[nac.second])
		{
			viz[nac.second] = 1;
			DFS(nac.first);
		}
	}
	ans.push_back(nod);
}

int main()
{
	int x, y;
	fin >> n >> m;
	for (int i = 1; i <= m; i++)
	{
		fin >> x >> y;
		edge[x].push_back({ y,i });
		edge[y].push_back({ x,i });
	}
	for(int i = 1; i <= n; i++)
		if (edge[i].size() & 1)
		{
			fout << "-1\n";
			return 0;
		}
	DFS(1);
	ans.pop_back();
	for (int i : ans)
		fout << i << " ";
	fout << '\n';
	fin.close();
	fout.close();
	return 0;
}