Pagini recente » Cod sursa (job #1913565) | Cod sursa (job #1728996) | Cod sursa (job #2757990) | Cod sursa (job #2093358) | Cod sursa (job #1211607)
#include <fstream>
#include <vector>
#include <bitset>
#include <stack>
#define DIMN 100010
#define DIMM 500010
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector <pair <int, int> > L[DIMN];
bitset<DIMM> U;
stack<int> S;
int D[DIMN];
int n, m, i, x, y, s;
void dfs(int nod) {
U[nod] = 1;
for (int i=0;i<L[nod].size(); i++)
if (U[ L[nod][i].first ] == 0)
dfs(L[nod][i].first);
}
int main() {
fin>>n>>m;
for (i=1;i<=m;i++) {
fin>>x>>y;
L[x].push_back(make_pair(y,i));
L[y].push_back(make_pair(x,i));
D[x] ++;
D[y] ++;
}
for (i=1;i<=n;i++)
if (D[i] > 0) {
dfs(i);
s = i;
break;
}
for (i=1;i<=n;i++)
if (U[i] == 0 && D[i] > 0) {
fout<<-1;
return 0;
}
U.reset();
int first = 1;
S.push(s);
while (!S.empty()) {
x = S.top();
if (D[x] == 0) {
if (!first) {
fout<<x<<" ";
}
first = 0;
S.pop();
continue;
}
while (U[L[x][ L[x].size()-1 ].second] == 1)
L[x].erase( L[x].end()-1 );
U[L[x][ L[x].size()-1 ].second] = 1;
S.push( L[x][ L[x].size()-1 ].first );
D[x]--;
D[ L[x][ L[x].size()-1 ].first ]--;
L[x].erase( L[x].end()-1 );
}
return 0;
}