Pagini recente » Cod sursa (job #2154454) | Cod sursa (job #1478619) | Cod sursa (job #2869384) | Cod sursa (job #992875) | Cod sursa (job #1940086)
#include <fstream>
#include <bitset>
#include <vector>
#define Nmax 100009
#define Mmax 500009
using namespace std;
ifstream fi("ciclueuler.in");
ofstream fo("ciclueuler.out");
int N,M,x,y;
vector<int> G[Mmax], Cycle;
pair<int,int> E[Mmax];
bitset<Mmax> viz;
int IsEulerian()
{
for(int i = 1; i <= N; ++i)
if(G[i].size() & 1) return 0;
return 1;
}
inline void DFS(int node)
{
while (G[node].size() )
{
if ( viz[G[node].back()] ) {G[node].pop_back();continue;}
viz[G[node].back()] = 1;
DFS( E[G[node].back()].first + E[G[node].back()].second - node);
}
Cycle.push_back(node);
}
int main()
{
fi >> N >> M;
for(int i = 1; i <= M; ++i)
{
fi >> x >> y;
G[x].push_back(i) ; G[y].push_back(i); // G[x] retine muchiile in care apare x
E[i] = {x, y}; // E[i] retine muchia i a grafului ca pair<x, y>
}
if(IsEulerian())
{
DFS(1);
for(size_t i = 0; i < Cycle.size() - 1; ++i)
fo << Cycle[i] << ' ';
fo << '\n';
}
else fo << -1 << '\n';
return 0;
}