Cod sursa(job #2767667)

Utilizator LXGALXGA a LXGA Data 7 august 2021 12:14:39
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
int n, m, a, b;
vector<int> ans;
vector<pair<int,int>> g[100001];
vector<int> stack;
int grad[100001], use[500001];
void dfs()
{
	/*for (auto i : g[nod])
	{
		if (use[i.second]) continue;
		use[i.second] = 1;
		dfs(i.first);
		ans.push_back(i.first);
	}*/
	stack.push_back(1);
	while (!stack.empty())
	{
		int nod = stack.back();
		if (g[nod].empty())
		{
			stack.pop_back();
			ans.push_back(nod);
			continue;
		}
		auto vec = g[nod].back();
		g[nod].pop_back();
		if (use[vec.second]) continue;
		use[vec.second] = 1;
		stack.push_back(vec.first);
	}
}
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= m; i++)
	{
		cin >> a >> b;
		g[a].push_back({ b, i });
		g[b].push_back({ a, i });
		grad[a]++;
		grad[b]++;
	}
	for (int i = 1; i <= n; i++)
	{
		if (grad[i] % 2)
		{
			cout << "-1\n";
			return 0;
		}
	}
	ans.reserve(m);
	dfs();
	ans.pop_back();
	for (auto i : ans)
		cout << i << ' ';
	return 0;
}