Pagini recente » Cod sursa (job #2685205) | Cod sursa (job #2400357) | Cod sursa (job #1883888) | Cod sursa (job #2424649) | Cod sursa (job #3005491)
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
#include <stack>
#define NMAX 100005
#define MMAX 500005
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
struct ok{
int vecin, poz;
};
vector <ok> adj[NMAX];
bool viz[MMAX];
stack <int> cycle;
stack <int> finalCycle;
int main()
{
int n, m, i, j, a, b;
in >> n >> m;
int cnt = n;
for (i = 1; i <= m; ++i)
{
in >> a >> b;
adj[a].push_back({b, i});
if (adj[a].size() % 2 == 1)
--cnt;
else if (adj[a].size() % 2 == 0)
++cnt;
adj[b].push_back({a, i});
if (adj[b].size() % 2 == 1)
--cnt;
else if (adj[b].size() % 2 == 0)
++cnt;
}
if (cnt != n)
out << "-1";
else
{
cycle.push(1);
while (!cycle.empty())
{
int node = cycle.top();
int found = false;
for (i = 0; i < adj[node].size(); ++i)
{
int vecin = adj[node][i].vecin;
int poz = adj[node][i].poz;
if (viz[poz] == 0)
{
viz[poz] = 1;
cycle.push(vecin);
found = true;
break;
}
}
if (found == false)
{
finalCycle.push(node);
cycle.pop();
}
}
while (finalCycle.size() > 1)
{
out << finalCycle.top() << " ";
finalCycle.pop();
}
}
return 0;
}