Pagini recente » Cod sursa (job #3153829) | Cod sursa (job #1978601) | Cod sursa (job #2437218) | Cod sursa (job #617139) | Cod sursa (job #1323309)
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
#define x first
#define y second
ifstream is ("ciclueuler.in");
ofstream os ("ciclueuler.out");
int N, M;
pair<int,int> E[500001];
vector <int> G[100051], Circuit;
bool B[500001];
bool IsEuler();
inline void DFS(int i);
int main()
{
is >> N >> M;
for (int i = 1, a, b; i <= M; ++i)
{
is >> a >> b;
G[a].push_back(i);
G[b].push_back(i);
E[i] = {a, b};
}
if (IsEuler())
{
DFS(1);
for (int i = 0; i < Circuit.size()-1; ++i)
os << Circuit[i] << ' ';
}
else
os << -1;
is.close();
os.close();
}
#define e G[i].back()
inline void DFS(int i)
{
while (!G[i].empty())
{
if (B[e])
{
G[i].pop_back();
continue;
}
B[e] = 1;
DFS(E[e].x + E[e].y - i);
}
Circuit.push_back(i);
};
bool IsEuler()
{
for (int i = 1; i <= N; ++i)
if (G[i].size() % 2 == 1) return 0;
return 1;
};