Cod sursa(job #2641324)

Utilizator mirceamaierean41Mircea Maierean mirceamaierean41 Data 11 august 2020 01:58:20
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
#include <algorithm>

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

const int maxn = 100005;

int n, m;
std::vector <int> g[maxn];

inline void euler(int stnode) 
{
	std::stack <int> st;
	st.push(stnode);
	std::vector <int> cycle;
	while (!st.empty()) 
	{
		int node = st.top();
		if (!g[node].empty())
		{
			int newnode = g[node].back();
			g[node].pop_back();
			g[newnode].erase(find(g[newnode].begin(), g[newnode].end(), node));
			st.push(newnode);
		}
		else 
		{
			st.pop();
			if (!st.empty())
				cycle.push_back(node);
		}
	}

	for (auto it : cycle)
		fout << it << ' ';
}

int main() 
{
	fin >> n >> m;
	for (int i = 1; i <= m; ++i) 
	{
		int x, y;
		fin >> x >> y;
		g[x].push_back(y);
		g[y].push_back(x);
	}
	for (int i = 1; i <= n; ++i) 
	{
		if (g[i].empty() || g[i].size() & 1)
		{
			fout << "-1\n";
			return 0;
		}
	}
	euler(1);
}