Pagini recente » Cod sursa (job #884920) | Istoria paginii runda/cerc_info_2011_01 | Istoria paginii runda/oni2009x2/clasament | Autentificare | Cod sursa (job #403784)
Cod sursa(job #403784)
#include<stdio.h>
int sol[500100],ver[1000100],leg[1000100],pus[1000100],start[100100],q,k,st[500100],grad[100100],viz[100100],n;
int ok()
{
int u=1,p=1,t,i;
for(i=1;i<=n;i++)
if(grad[i]%2)
return 0;
st[1]=1;
viz[1]=1;
while(p<=u)
{
t=start[st[p]];
while(t)
{
if(!viz[ver[t]])
{
st[++u]=ver[t];
viz[ver[t]]=1;
}
t=leg[t];
}
p++;
}
if(u!=n)
return 0;
return 1;
}
int main()
{
int m,i,x,y,t;
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d %d",&x,&y);
ver[++q]=y;
leg[q]=start[x];
start[x]=q;
ver[++q]=x;
leg[q]=start[y];
start[y]=q;
grad[x]++;
grad[y]++;
}
if(!ok())
{
printf("%d",-1);
return 0;
}
q=0;
st[++k]=1;
while(k)
{
t=start[st[k]];
if(t)
{
start[st[k]]=leg[t];
if(!pus[t])
{
pus[t]=1;
if(t%2)
pus[t+1]=1;
else
pus[t-1]=1;
st[++k]=ver[t];
}
}
else
sol[++q]=st[k--];
}
for(i=1;i<q;i++)
printf("%d ",sol[i]);
return 0;
}