Pagini recente » Cod sursa (job #3169873) | Cod sursa (job #2761682) | Cod sursa (job #1541803) | Cod sursa (job #1670461) | Cod sursa (job #2388926)
#include <fstream>
#include <vector>
using namespace std;
ifstream fi ("ciclueuler.in");
ofstream fo ("ciclueuler.out");
vector<pair<int,int>> v[100005];
struct nod{
int val;
nod *ant,*urm;
nod()
{
val=0;
ant=NULL;
urm=NULL;
}
}*cap,*coada,*poz;
int idx[100005],viz[500006];
int nrnod,nrmuchii;
int main()
{
fi>>nrnod>>nrmuchii;
for (int i=1;i<=nrmuchii;i++)
{
int x,y;
fi>>x>>y;
v[x].push_back(make_pair(y,i));
v[y].push_back(make_pair(x,i));
}
for (int i=1;i<=nrnod;i++)
if (v[i].size()%2==1)
{
fo<<-1;
return 0;
}
cap=new nod;coada=new nod;poz=new nod;
cap->urm=poz;
poz->urm=coada;
coada->ant=poz;
poz->ant=cap;
poz->val=1;
while (poz!=cap)
{
int valcur=poz->val;
if (idx[valcur]==v[valcur].size())
{
poz=poz->ant;
continue;
}
if (viz[v[valcur][idx[valcur]].second]) {idx[valcur]++;continue;}
viz[v[valcur][idx[valcur]].second]=1;
int valurm=v[valcur][idx[valcur]].first;
nod *pozurm=new nod;
pozurm->urm=poz->urm;
pozurm->ant=poz;
poz->urm->ant=pozurm;
poz->urm=pozurm;
pozurm->val=valurm;
idx[valcur]++;
poz=pozurm;
}
poz=cap->urm;
while (poz!=coada->ant)
{
fo<<poz->val<<' ';
poz=poz->urm;
}
return 0;
}