Pagini recente » Cod sursa (job #3175306) | Cod sursa (job #1658218) | Cod sursa (job #734455) | Cod sursa (job #290942) | Cod sursa (job #2081697)
#include <bits/stdc++.h>
#define NMAX 100005
#define MMAX 500005
#define pii pair <int, int>
#define INF 0x3f3f3f3f
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int N, M;
int gr[NMAX], used[MMAX];
vector <int> rsp;
vector <pii> v[NMAX];
stack <int> st;
int main()
{
fin >> N >> M;
for (int i = 1; i <= M; i++)
{
int x, y;
fin >> x >> y;
v[x].push_back({y, i});
v[y].push_back({x, i});
gr[x]++, gr[y]++;
}
for (int i = 1; i <= N; i++)
if (v[i].size() % 2 != 0 || v[i].size() == 0)
{
fout << "-1\n";
return 0;
}
st.push(1);
while (!st.empty())
{
int nod = st.top();
if (gr[nod] == 0)
{
st.pop();
if (!st.empty())
rsp.push_back(st.top());
}
else
{
while (used[v[nod].back().second] == 1)
v[nod].pop_back();
int nxt = v[nod].back().first;
int edge = v[nod].back().second;
used[edge] = 1;
gr[nod]--, gr[nxt]--;
st.push(nxt);
}
}
vector <int> :: iterator it;
for (it = rsp.begin(); it != rsp.end(); it++)
fout << *it << " ";
return 0;
}