Pagini recente » Cod sursa (job #2744350) | Cod sursa (job #219171) | Cod sursa (job #512116) | Cod sursa (job #340999) | Cod sursa (job #630662)
Cod sursa(job #630662)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector<int> muchii[100100];
int leg[1000100],dr[1000100];
char marc[1000100];
int stiv[100100];
bool viz[100100];
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int main()
{
int n,m,i,x,y,k,nod,nr;
in>>n>>m;
nr=0;
for(i=1;i<=m;++i)
{
in>>x>>y;
muchii[x].push_back(++nr);
marc[nr]=0;
dr[nr]=y;
leg[nr]=nr+1;
muchii[y].push_back(++nr);
marc[nr]=0;
dr[nr]=x;
leg[nr]=nr-1;
}
for(i=1;i<=n;++i)
{
if(muchii[i].size()&1)
{
out<<-1<<"\n";
return 0;
}
}
k=n-1;
viz[1]=true;
stiv[0]++;
stiv[1]=1;
while(k && stiv[0])
{
i=0;
while(i<muchii[stiv[stiv[0]]].size() && viz[dr[muchii[stiv[stiv[0]]][i]]])
{
i++;
}
if(i==muchii[stiv[stiv[0]]].size())
{
stiv[0]--;
}
else
{
k--;
viz[dr[muchii[stiv[stiv[0]]][i]]]=true;
stiv[stiv[0]+1]=dr[muchii[stiv[stiv[0]]][i]];
marc[muchii[stiv[stiv[0]]][i]]=1;
marc[leg[muchii[stiv[stiv[0]]][i]]]=1;
stiv[0]++;
}
}
if(k)
{
out<<-1<<"\n";
return 0;
}
k=m-1;
nod=1;
out<<"1";
while(k)
{
i=0;
while(i<muchii[nod].size() && marc[muchii[nod][i]]!=0)
{
i++;
}
if(i==muchii[nod].size())
{
i=0;
while(i<muchii[nod].size() && marc[muchii[nod][i]]!=1)
{
i++;
}
}
out<<" "<<dr[muchii[nod][i]];
marc[muchii[nod][i]]=2;
marc[leg[muchii[nod][i]]]=2;
nod=dr[muchii[nod][i]];
k--;
}
out<<"\n";
return 0;
}