Pagini recente » Cod sursa (job #167338) | Cod sursa (job #2756191) | Cod sursa (job #940504) | Cod sursa (job #728673) | Cod sursa (job #2477432)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,i,j,x,y,gr[100005],ciclu[500005],start[100005],p,euler[500005];
bool viz[500005];
struct arc{
int nod,m;
};
vector <arc> g[500005];
int main(){
fin>>n>>m;
for(i=1;i<=m;i++){
fin>>x>>y;
gr[x]++;
gr[y]++;
g[x].push_back({y,i});
g[y].push_back({x,i});
}
for(i=1;i<=n;i++){
if(gr[i]%2){
fout<<-1;
return 0;
}
if(gr[i]>0 && !ciclu[1])
ciclu[1]=i;
}
int k=1;
while(k>0){
if(gr[ciclu[k]]==0){
euler[++p]=ciclu[k];
k--;
continue;
}
for(;start[ciclu[k]]<g[ciclu[k]].size();start[ciclu[k]]++){
int nod = g[ciclu[k]][start[ciclu[k]]].nod;
int arc = g[ciclu[k]][start[ciclu[k]]].m;
if(viz[arc]==0){
gr[nod]--;
gr[ciclu[k]]--;
viz[arc]=1;
ciclu[++k]=nod;
break;
}
}
}
if(p-1!=m){
fout<<-1;
return 0;
}
for(i=1;i<p;i++)
fout<<euler[i]<<' ';
return 0;
}