Cod sursa(job #2185439)

Utilizator mihai50000Mihai-Cristian Popescu mihai50000 Data 24 martie 2018 15:22:40
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
const int NMAX = 100004;
vector <pair<int, int> > v[NMAX];
vector<int> solutie;
stack<int> stiva;
int viz[5*NMAX], n, m;
int main() 
{
	f >> n >> m;
	for (int i = 1; i <= m; i++) 
	{
		int x, y;
		f >> x >> y;
		v[x].push_back(make_pair(y, i));
		v[y].push_back(make_pair(x, i));
	}
	for (int i = 1; i <= n; i++) 
	{
		if (v[i].size() % 2 == 1) 
		{
			g << "-1";
			return 0;
		}
	}
	stiva.push(1);
	while (!stiva.empty()) 
	{
		int nod = stiva.top();
		if (v[nod].size() == 0) 
		{
			solutie.push_back(nod);
			stiva.pop();
		}
		else 
		{
			int edge = v[nod].back().second;
			int y = v[nod].back().first;
			v[nod].pop_back();
			if (!viz[edge]) 
			{
				viz[edge] = 1;
				stiva.push(y);
			}
		}
	}
	for (int i = 0; i < solutie.size() - 1; i++)
		g << solutie[i] << " ";
}