Pagini recente » Cod sursa (job #961688) | Cod sursa (job #2469278) | Cod sursa (job #557682) | Istoria paginii runda/26_februarie_simulare_oji_2024_clasa_10 | Cod sursa (job #1157558)
#include <bitset>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int MAXN = 100009;
int N, M, sol[MAXN*5], l;
vector < int > ind[MAXN], G[MAXN];
bitset < MAXN*5 > used, viz;
struct muchii
{
int unu, doi;
} v[MAXN*5];
void citire()
{
fin >> N >> M;
for (int i = 1; i <= M; ++i)
{
int x, y;
fin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
v[i].unu = x, v[i].doi = y;
ind[x].push_back(i);
ind[y].push_back(i);
}
}
inline int varf(int nod, int val)
{
if ( v[nod].unu == val )
return v[nod].doi;
return v[nod].unu;
}
inline void ciclu_euler(int tata)
{
int L = ind[tata].size();
for (int i = 0; i < L; ++i)
{
int indice = ind[tata][i];
if ( !used[indice] )
{
used[indice] = true;
int fiu = varf(indice, tata);
ciclu_euler(fiu);
}
}
sol[++l] = tata;
}
inline void dfs(int tata)
{
viz[tata] = true;
int L = G[tata].size();
for (int i = 0; i < L; ++i)
{
int fiu = G[tata][i];
if ( !viz[fiu] )
dfs(fiu);
}
}
bool conex()
{
dfs(1);
for (int i = 1; i <= N; ++i)
if ( !viz[i] )
return false;
return true;
}
int main ()
{
citire();
bool ok = conex();
if ( !ok )
{
fout << -1;
return 0;
}
ciclu_euler(1);
if ( l == M + 1 )
{
for (int i = 1; i <= M; ++i)
fout << sol[i] << " ";
}
else
fout << -1;
fin.close();
fout.close();
return 0;
}