Pagini recente » Monitorul de evaluare | Cod sursa (job #3361927)
#include <bits/stdc++.h>
using namespace std;
#define USE_STD_IO 0
#if USE_STD_IO
#define fin cin
#define fout cout
#else
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
#endif
struct Muchie {
int vec, idx;
};
vector<Muchie> gr[500002];
int n, m, i, x, y;
bool viz[500002];
vector<int> rasp;
static inline void Euler(int nod) {
while(!gr[nod].empty()) {
Muchie mch = gr[nod].back();
gr[nod].pop_back();
if(!viz[mch.idx]) {
viz[mch.idx] = true;
Euler(mch.vec);
}
}
rasp.push_back(nod);
}
int main() {
#if USE_STD_IO
ios_base::sync_with_stdio(false);
#endif
fin.tie(NULL);
fout.tie(NULL);
fin >> n >> m;
for(i = 1; i <= m; i++) {
fin >> x >> y;
gr[x].push_back({y, i});
gr[y].push_back({x, i});
}
int start = 1, gres = 0;
for(i = 1; i <= n; i++) {
if(1 & gr[i].size()) {
gres++;
start = i;
}
}
if(0 != gres) {
fout << "-1";
return 0;
}
Euler(start);
if(m != rasp.size() - 1) {
fout << "-1";
return 0;
}
m = rasp.size() - 1;
for(i = 0; i < m; i++) {
fout << rasp[i] << ' ';
}
return 0;
}