Pagini recente » Monitorul de evaluare | Diferente pentru problema/binsearch intre reviziile 13 si 4 | Cod sursa (job #1590991) | Diferente pentru utilizator/ando intre reviziile 5 si 4 | Cod sursa (job #2572542)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,k,x,y,nr;
vector < pair <int, int> > g[100001];
int start[100001],gr[100001],c[100001],st[500001];
bool viz[500001];
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y;
g[x].push_back({y,i});
g[y].push_back({x,i});
gr[x]++,gr[y]++;
}
for(int i=1;i<=n;i++)
if(gr[i]%2!=0)
{
fout<<-1;
return 0;
}
st[k=1]=1;
while(k>0)
{
if(gr[st[k]]>0)
{
int nod=st[k];
for(;start[nod]<g[nod].size();start[nod]++)
{
int poz=g[nod][start[nod]].second;
int nou=g[nod][start[nod]].first;
if(viz[poz]==0)
{
viz[poz]=1;
gr[nod]--;
gr[nou]--;
st[++k]=nou;
start[nod]++;
break;
}
}
}
else
{
c[++nr]=st[k];
k--;
}
}
for(int i=nr;i>=2;i--)
fout<<c[i]<<' ';
return 0;
}