Pagini recente » Cod sursa (job #1948731) | Cod sursa (job #1904779) | Cod sursa (job #2243691) | Cod sursa (job #161488) | Cod sursa (job #3266864)
#include <fstream>
#include <vector>
#include <stack>
#include <unordered_map>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int MAXN = 100000;
vector<vector<pair<int, int>>> tabel(MAXN + 1);
vector<bool> viz;
vector<int> grad;
stack<int> drum;
vector<int> ciclu;
void gaseste(int start) {
drum.push(start);
while (!drum.empty()) {
int node = drum.top();
if (!tabel[node].empty()) {
auto [next_node, edge_id] = tabel[node].back();
tabel[node].pop_back();
if (!viz[edge_id]) {
viz[edge_id] = true;
drum.push(next_node);
}
} else {
ciclu.push_back(node);
drum.pop();
}
}
}
int main() {
int N, M;
fin >> N >> M;
grad.resize(N + 1, 0);
viz.resize(M, false);
for (int i = 0; i < M; ++i) {
int u, v;
fin >> u >> v;
tabel[u].emplace_back(v, i);
tabel[v].emplace_back(u, i);
grad[u]++;
grad[v]++;
}
for (int i = 1; i <= N; ++i) {
if (grad[i] % 2 != 0) {
fout << -1 << "\n";
return 0;
}
}
int start = -1;
for (int i = 1; i <= N; ++i) {
if (!tabel[i].empty()) {
start = i;
break;
}
}
if (start == -1) {
fout << -1 << "\n";
return 0;
}
gaseste(start);
if (ciclu.size() != M + 1) {
fout << -1 << "\n";
return 0;
}
for (int i = 0; i < ciclu.size() - 1; ++i) {
fout << ciclu[i] << " ";
}
fout << ciclu.back() << "\n";
return 0;
}