Pagini recente » Cod sursa (job #3227065) | Statistici Patras Sanda (sanda-maria) | Cod sursa (job #848767) | Cod sursa (job #3253650) | Cod sursa (job #2064502)
#include<fstream>
#include<vector>
#include<bitset>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int NMAX=100005;
const int MMAX=500005;
int n,m,st[MMAX],dr[MMAX],ciclu[MMAX];
vector<int>graf[NMAX];
bitset<MMAX>viz;
//st[i]=capatul stang al muchiei i
//dr[i]=capatul drept al muchiei i
inline void Citire()
{
int i;
fin>>n>>m;
for (i=1;i<=m;i++)
{
fin>>st[i]>>dr[i];
graf[st[i]].push_back(i);
graf[dr[i]].push_back(i);
}
}
inline void Con(int x)
{
int i;
viz[x]=1;
for (vector<int>::iterator it=graf[x].begin();it!=graf[x].end();it++)
if (!viz[st[*it] + dr[*it]-x])
Con(st[*it] + dr[*it]-x);//ma duc in celalalt capat al muchiei
}
inline bool Conexitate()
{
Con(1);
int i;
for (i=1;i<=n;i++)
if (!viz[i]) return 0;
return 1;
}
inline bool EsteEulerian()
{
int i;
for (i=1;i<=n;i++)
if (graf[i].size()&1) return 0;
return 1;
}
inline void DFS(int x)
{
int i;
for (vector<int>::iterator it=graf[x].begin();it!=graf[x].end();it++)
if (!viz[*it])//daca muchia prezenta nu este vizitata
{
viz[*it]=1;//o vizitam
DFS(st[*it] + dr[*it]-x);//mergem in celalalt capat al muchiei
}
ciclu[++ciclu[0]]=x;
}
int main()
{
Citire();
if (Conexitate() && EsteEulerian())
{
for (int i=1;i<=MMAX;i++) viz[i]=0;
DFS(1);
for (int i=1;i<=ciclu[0];i++) fout<<ciclu[i]<<" ";
}
else fout<<"-1";
fout<<"\n";
return 0;
}