Pagini recente » Cod sursa (job #2573445) | Cod sursa (job #362444) | Cod sursa (job #2030625) | Cod sursa (job #1721091) | Cod sursa (job #2207223)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n,m,x,y,k,gr[100001],sir[100002];
struct muchie{int b;muchie *n;}*a[100001],*p;
bool v[100001];
void delet(int x,int y)
{
muchie *p=a[x];
if(p->b!=y)
{
for(;p->n->b!=y&&p->n!=NULL;p=p->n)if(p->n==p)cout<<x<<' '<<y<<' '<<p->b<<'\n';;
if(p->n==NULL){cout<<" '-' ";}
else
{
p->n=p->n->n;
p=p->n;
delete p;
}
}
else
{
a[x]=p->n;
delete p;
}
}
void srtitdii(int x)
{
int B[19901];
B[0]=x;x=1;
p=a[B[x-1]];
B[x]=p->b;
if(p->b!=B[x-1])delet(p->b,B[x-1]);
a[B[x-1]]=a[B[x-1]]->n;
--gr[p->b];--gr[B[x-1]];
delete p;
++x;
while(B[x-1]!=B[0])
{
p=a[B[x-1]];
B[x]=p->b;
if(p->b!=B[x-1])delet(p->b,B[x-1]);
a[B[x-1]]=a[B[x-1]]->n;
--gr[p->b];--gr[B[x-1]];
delete p;
++x;
}
B[x]=0;
for(int i=1;1;++i)if(sir[i]==B[0])
{
++i;
int h=i,j;
for(j=x;sir[i]!=0;++j,++i)
{
B[j]=sir[i];
}
B[j]=0;
for(j=1;B[j]!=0;++j,++h)
{
sir[h]=B[j];
}
break;
}
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;++i)a[i]=NULL;
while(f>>x>>y)
{
p=new muchie;
p->b=x;
p->n=a[y];
a[y]=p;
p=new muchie;
p->b=y;
p->n=a[x];
a[x]=p;
++gr[x];++gr[y];
}
for(int i=1;i<=n;++i)if(gr[i]%2==1){g<<-1;return 0;}
for(int i=1;1;++i)if(gr[i]!=0){sir[1]=i;srtitdii(i);break;}
for(int i=1;i<=m;++i)if(gr[sir[i]]>0)
{
srtitdii(sir[i]);
}
for(int i=1;i<=m;++i)g<<sir[i]<<' ';
return 0;
}