Cod sursa(job #2824013)

Utilizator vasiliumirunamariaVasiliu Miruna-Maria vasiliumirunamaria Data 30 decembrie 2021 17:04:39
Problema Ciclu Eulerian Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#define N 500001
//#define oo  0x3f3f3f3f
using namespace std;

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








vector<pair<int, int>>a_e[N];
int n, m;

void Citire_Eulerian()
{
	int i, x, y;

	for (i = 0; i < m; i++)
	{
		fin >> x >> y;

		a_e[x].push_back(make_pair(y, i));
		a_e[y].push_back(make_pair(x, i));


	}

}

int CheckEulerian(vector<pair<int, int>>a_e[N], int n)
{
	int i, ct = 0;

	for (i = 1; i <= n; i++)
		if (a_e[i].size() % 2 == 1)
			return 0;


	return 1;

}

void Solve_Euler(vector<pair<int, int>>a_e[N], int n, int k, vector<int> euler, stack<int> S)
{
	int i, j;
	vector<bool> viz;
	for (i = 0; i <= n + 5; i++)
		viz.push_back(0);
	S.push(k);
	while (!S.empty())
	{
		int x = S.top();

		if (a_e[x].size())
		{
			int e = a_e[x].back().first;
			int muchie = a_e[x].back().second;
			a_e[x].pop_back();

			if (!viz[muchie])
			{
				viz[muchie] = 1;
				S.push(e);


			}
		}
		else
		{
			S.pop();
			fout << x << " ";
		}





	}

}
void Eulerian()
{
	int i, j, x, y;

	stack<int> S;
	vector<int> euler;


	if (CheckEulerian(a_e, n))
	{
		Solve_Euler(a_e, n, 1, euler, S);

		//fout << 1;
	}
	else fout << -1;
}
int main()
{

	

	fin >> n >> m;
	Citire_Eulerian();
	Eulerian();




	return 0;
}