Pagini recente » Cod sursa (job #2926297) | Cod sursa (job #2929984) | Cod sursa (job #1128322) | Cod sursa (job #2909132) | Cod sursa (job #2551342)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
const int nmax = 1e5 + 5;
vector <pair <int, int> > neigh[nmax];
void findCycle(int start, int m)
{
stack <int> stk;
vector <int> removed(m + 1, 0);
stk.push(start);
while (!stk.empty())
{
int node = stk.top();
if (neigh[node].empty())
{
stk.pop();
if (!stk.empty())
g << node << " ";
}
else
{
auto edge = neigh[node].back();
neigh[node].pop_back();
int id = edge.first;
int next = edge.second;
if (removed[id])
continue;
removed[id] = 1;
stk.push(next);
}
}
}
int main()
{
int n, m;
f >> n >> m;
for (int i = 1; i <= m; ++ i)
{
int u, v;
f >> u >> v;
neigh[u].emplace_back(i, v);
neigh[v].emplace_back(i, u);
}
for (int node = 1; node <= n; ++ node)
if (neigh[node].size() % 2 == 1)
{
g << -1;
return 0;
}
findCycle(1, m);
}