Pagini recente » Istoria paginii utilizator/viorelgingie | Monitorul de evaluare | Istoria paginii runda/problemegogule | Istoria paginii utilizator/rumburak | Cod sursa (job #2054920)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int N=100001;
const int M=500001;
vector<int>a[N];
bool viz[M];
int n,m,m1[M],m2[M],q[M],k=0;
void citire()
{
int i;
in>>n>>m;
for(i=1; i<=m; i++)
{
in>>m1[i]>>m2[i];
a[m1[i]].push_back(i);
a[m2[i]].push_back(i);
}
}
/*
1 0 1 0 0 0
1 1 2 2 3 3
2 3 2 3 4 4
1 1 2
2 1 3 4
3 2 4 5 6
4 5 6
*/
inline int celalalt(int indice, int nod)
{
if (m1[indice] == nod)
{
return m2[indice];
}
return m1[indice];
}
void dfs(int nod)
{
int i,indice;
for(i=0; i<a[nod].size(); i++)
{
indice=a[nod][i];
if(viz[indice]==0)
{
//q[++k]=m1[indice];
//q[++k]=m2[indice];
viz[indice]=1;
dfs(celalalt(indice, nod));
}
}
q[++k] = nod;
}
//dfs 1
//dfs 2
//dfs 2
//dfs 3
//dfs 4
//dfs 3
int main()
{
int ok=1,i,j;
citire();
/*
for(i=1;i<=n;i++)
{
out<<i<<" ";
for(j=0;j<a[i].size();j++)
out<<a[i][j]<<" ";
out<<endl;
}
*/
for(i=1; i<=n; i++)
if(ok==1)
{
if(a[i].size()%2==1)
ok=0;
}
if(ok==0)
out<<-1;
else
{
for(i=1; i<=n; i++)
if(a[i].size()!=0 && ok==1)
{
dfs(i);
ok=0;
}
if(k==m+1)
for(i=1; i<=k; i++)
out<<q[i]<<" ";
else
out<<-1;
}
return 0;
}