Cod sursa(job #2932708)

Utilizator namesurname01Name Surname namesurname01 Data 3 noiembrie 2022 19:00:19
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <vector>
#include <deque>

using namespace std;

#define N 100001

struct bla {
	int neigh, edge;
};
vector<bla> graph[N];
bool viz[500001];
deque<int> deq;


void euler(int node) {

	while(!graph[node].empty()) { //e mai optim sa elimin muchiile prin care am trecut, sa nu mai tot verific daca am trecut sau nu
		int value = graph[node].back().neigh;
		int edge = graph[node].back().edge;
		graph[node].pop_back();
		if (!viz[edge]) {
			viz[edge] = 1;
			euler(value);
		}
	}
	deq.push_back(node);
}

int main() {
	ifstream f("ciclueuler.in");
	ofstream g("ciclueuler.out");
	int nodes, arcs, a, b;
	f >> nodes >> arcs;
	for (int i = 1; i <= arcs; ++i) {
		f >> a >> b;
		graph[a].push_back({b, i});
		graph[b].push_back({a,i});
	}
	for (int i = 1; i <= nodes; ++i) {
		if (graph[i].size() % 2 != 0) {
			g << -1;
		}
	}
	euler(1);
	deq.pop_back();
	while (!deq.empty()) {
		g << deq.back() << " ";
		deq.pop_back();
	}
	f.close();
	g.close();
	return 0;
}