Pagini recente » Cod sursa (job #345705) | Cod sursa (job #1506042) | Cod sursa (job #1752295) | Cod sursa (job #922677) | Cod sursa (job #2468672)
#include <fstream>
#include <vector>
#include <bitset>
#define DIM 100010
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,i,x,y,d[DIM],st[5*DIM],k,nod,vecin,muchie;
vector< pair<int,int> > L[DIM];
bitset<5*DIM> f;
void dfs(int nod) {
f[nod]=1;
for (int i=0;i<L[nod].size();i++) {
int vecin=L[nod][i].first;
if (f[vecin]==0)
dfs(vecin);
}
}
int main() {
fin>>n>>m;
for (i=1;i<=m;i++) {
fin>>x>>y;
L[x].push_back({y,i});
L[y].push_back({x,i});
d[x]++, d[y]++;
}
dfs(1);
for (i=1;i<=n;i++) {
if (d[i]%2==1||(f[i]==0&&d[i]>0)) {
fout<<-1;
return 0;
}
}
f.reset();
st[++k]=1;
while (k) {
nod=st[k];
if (d[nod]==0) {
if (k!=1)
fout<<nod<<" ";
k--;
continue;
}
while (f[L[nod].back().second]==1)
L[nod].pop_back();
vecin=L[nod].back().first;
muchie=L[nod].back().second;
st[++k]=vecin;
L[nod].pop_back();
d[nod]--, d[vecin]--, f[muchie]=1;
}
return 0;
}