Pagini recente » Cod sursa (job #2210851) | Cod sursa (job #677621) | Cod sursa (job #1788724) | Cod sursa (job #1008734) | Cod sursa (job #1323374)
#include <fstream>
#include <vector>
#include <stack>
#include <bitset>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n, i, m, x, y, k, A[100010];
bitset<500010>v;;
vector< pair <int, int> >L[100010];
stack<int> S;
void dfs(int nod){
v[nod] = 1;
for(int i = 1; i < L[nod].size(); i ++)
if(v[ 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));
A[x] ++;
A[y] ++;
}
for(i = 1; i <= n; i ++)
if(A[i])
{
dfs(i);
k = i;
break;
}
for(i = 1; i <= n;i ++)
if( ( v[i] == 0 && A[i] ) || A[i] % 2 == 1)
{
fout << -1;
return 0;
}
v.reset();
S.push(k);
int ok = 1;
while(!S.empty()){
k = S.top();
if (A[k] == 0) {
if (!ok) {
fout << k << " ";
}
ok = 0;
S.pop();
continue;
}
while (v[ L[k][ L[k].size() - 1 ].second] == 1)
L[k].erase( L[k].end() - 1 );
v[L[k][ L[k].size() - 1 ].second] = 1;
S.push( L[k][ L[k].size() - 1 ].first );
A[k]--;
A[ L[k][ L[k].size() - 1 ].first ]--;
L[k].erase( L[k].end()-1 );
}
return 0;
}