Pagini recente » Cod sursa (job #2819979) | Cod sursa (job #1337714) | Cod sursa (job #1197675) | Cod sursa (job #1656650) | Cod sursa (job #976789)
Cod sursa(job #976789)
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector < pair< int, int > > G[100100];
bitset <100100> viznod;
bitset <500100> vizmuchie;
vector <int> stiva;
vector <int> stiva2;
vector <int> :: iterator it;
int grad[100100];
int n, m, s, ok;
void euler(int x) {
if (x == stiva[0]) {
ok++;
if (ok == 2) {
return;
}
}
for (int i = 0; i < G[x].size(); i++) {
if (vizmuchie[G[x][i].second] == 0) {
vizmuchie[G[x][i].second] = 1;
stiva.push_back(G[x][i].first);
euler(G[x][i].first);
return;
}
}
}
void euler2(int x) {
if (x == stiva2[0]) {
ok++;
if (ok == 2) {
return;
}
}
for (int i = 0; i < G[x].size(); i++) {
if (vizmuchie[G[x][i].second] == 0) {
vizmuchie[G[x][i].second] = 1;
stiva2.push_back(G[x][i].first);
euler2(G[x][i].first);
return;
}
}
}
int main()
{
int x, y;
f >> n >> m;
for (int i = 1; i <= m; i++) {
f >> x >> y;
G[x].push_back(make_pair(y, i));
G[y].push_back(make_pair(x, i));
grad[x]++;
grad[y]++;
}
for (int i = 1; i <= n; i++) {
if (grad[i] % 2 != 0) {
g << "-1";
exit(0);
}
}
s = x;
stiva.push_back(s);
euler(s);
it = stiva.begin();
int okk = 1;
while (okk) {
okk = 0;
for (int i = 0; i < stiva.size() && okk == 0; i++) {
for (int j = 0; j < G[i].size() && okk == 0; j++) {
if (vizmuchie[G[i][j].second] == 0) {
vizmuchie[G[i][j].second] = 1;
stiva2.push_back(G[i][j].first);
euler2(G[i][j].first);
ok = 1;
okk = 1;
}
}
}
/*for (int i = 0; i < stiva2.size(); i++) {
cout << stiva2[i] << ' ';
}
cout << endl;*/
int k = 0;
for (int i = 0; i < stiva.size(); i++) {
if(stiva[i] == stiva2[stiva2.size() - 1]) {
stiva.insert(it + i + 1, stiva2.begin(),stiva2.end());
while(stiva2.size()) {
stiva2.pop_back();
}
break;
}
}
}
for (int i = 0; i < stiva.size(); i++) {
g << stiva[i] << ' ';
}
//cout << endl;
return 0;
}