Pagini recente » Cod sursa (job #572396) | Cod sursa (job #1264955) | Cod sursa (job #670556) | Cod sursa (job #3263704) | Cod sursa (job #3267627)
#include <bits/stdc++.h>
#define MAX1 100000
#define MAX2 500000
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,x,y,i,j,S[MAX2+10],G[MAX1+10],st,sol[MAX2+10],cnt;
bitset <MAX2+10> fr;
bitset <MAX1+10> mers;
queue <int> q;
struct elem{
int nod,id;
};
vector <elem> g[MAX1+10];
void dfs(int x){
mers[x] = 1;
for(auto &it:g[x]){
if(!mers[x]){
dfs(it.nod);
}
}
}
int main()
{
fin>>n>>m;
for(i=1;i<=m;i++){
fin>>x>>y;
g[x].push_back({y,i});
g[y].push_back({x,i});
G[x]++;
G[y]++;
}
for(i=1;i<=n;i++){
if(G[i]){
dfs(i);
st = i;
}
}
for(i=1;i<=n;i++){
if(G[i]%2 != 0){
fout<<"-1";
return 0;
}
if(G[i] > 0 && !mers[i]){
fout<<"-1";
return 0;
}
}
S[1] = st;
j = 1;
while(j){
if(G[S[j]] == 0){
sol[++cnt] = S[j--];
continue;
}
while(fr[g[S[j]].back().id])
g[S[j]].pop_back();
x = g[S[j]].back().nod;
y = g[S[j]].back().id;
fr[y] = 1;
G[x]--;
G[S[j]]--;
S[++j] = x;
}
for(i=2;i<=cnt;i++){
fout<<sol[i]<<' ';
}
return 0;
}