Pagini recente » Cod sursa (job #1348334) | Cod sursa (job #2952430) | Cod sursa (job #275661) | Cod sursa (job #2882584) | Cod sursa (job #1979440)
#include <bits/stdc++.h>
#define nmax 500005
using namespace std;
int st[nmax], dr[nmax], q[nmax];
int poz[nmax];
/// poz[i] - pozitia unde am ramas in lista de adiacenta L[i]
int N, M, K;
bitset <nmax> viz ;
vector <int> L[100005];
inline void DFS(int nod)
{
while (poz[nod] < L[nod].size())
{
int k = L[nod][poz[nod]++];
if(!viz[k])
{
viz[k] = 1;
DFS(st[k] + dr[k] - nod);
}
}
q[++K] = nod;
}
int main()
{
ifstream fin("ciclueuler.in");
fin >> N >> M;
for(int i = 1; i <= M; i++)
{
fin >> st[i] >> dr[i];
L[st[i]].push_back(i);
L[dr[i]].push_back(i);
}
bool ok=true;
for(int i = 1; i <= N; i++)
if(L[i].size() % 2 == 1) ok=false;
ofstream fout("ciclueuler.out");
if(!ok) fout << "-1\n";
else
{
DFS(1);
for(int i = 1; i < K; i++)
fout << q[i] << " ";
fout << "\n";
}
fout.close();
return 0;
}