Pagini recente » Istoria paginii runda/abbwbw/clasament | Cod sursa (job #770482) | Cod sursa (job #1725337) | Istoria paginii runda/lasm_28.11.2018 | Cod sursa (job #2202952)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <string.h>
#define dMAX 100000
using namespace std;
int n, m, x, y, poz, nr, newV, u, p;
vector<pair<int, bool> > graf[dMAX + 2];
int d[dMAX + 2], l;
int from[2][dMAX * 5 + 2], to[2][dMAX * 5 + 2];
bool viz[dMAX * 5 + 2], vv;
int xx, yy;
char sir[30];
int idx;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
void GetInt(int &t) {
t = 0;
while (isdigit(sir[idx])) {
t *= 10;
t += (int)sir[idx] - '0';
idx++;
}
idx++;
}
void Euler(int v) {
for (u = 0; u < graf[v].size(); u++) {
p = graf[v][u].second;
xx = from[p][graf[v][u].first];
yy = to[p][graf[v][u].first];
vv = viz[graf[v][u].first];
if (!vv) {
viz[graf[v][u].first] = true;
Euler(yy);
}
}
nr++;
if (nr <= m)
fout << v << ' ';
}
int main()
{
int i, j;
fin >> n >> m;
fin.get();
for (i = 1; i <= m; i++) {
idx = 0;
fin.getline(sir, 15);
GetInt(x);
GetInt(y);
l++;
from[false][l] = x, to[false][l] = y;
from[true][l] = y, to[true][l] = x;
graf[x].push_back({l, false});
graf[y].push_back({l, true});
d[x]++, d[y]++;
}
for (i = 1; i <= n; i++) {
if (d[i] % 2) {
fout << -1;
return 0;
}
}
Euler(1);
return 0;
}