Pagini recente » Cod sursa (job #1605477) | Cod sursa (job #677169) | Cod sursa (job #2725863) | Cod sursa (job #2927130) | Cod sursa (job #1492735)
#include <stack>
#include <vector>
#include <string>
#include <fstream>
using namespace std;
vector<pair<int,int>> No[100001];
int gr[100001];
bool del[500005];
vector<int> cicle;
ifstream f("ciclueuler.in");
ofstream of("ciclueuler.out");
void euler(int root){
stack<int> s;
s.push(root);
while (!s.empty()){
int x = s.top();
while (No[x].size() > 0 && del[No[x].back().second])No[x].pop_back();
if (No[x].size() > 0){
int c = No[x].back().first;
del[No[x].back().second] = 1;
No[x].pop_back();
s.push(c);
}
else{
of << x << " ";
s.pop();
}
}
}
int main(){
int N, M, a, b;
string s;
getline(f, s);
int nr, j;
nr = 0;
j = 0;
while (s[j] != ' '){
nr = nr * 10 + s[j] - '0';
++j;
}
N = nr;
++j;
nr = 0;
while (j<s.size()){
nr = nr * 10 + s[j] - '0';
++j;
}
M = nr;
for (int i = 1; i <= M; ++i){
getline(f, s);
nr = 0;
j = 0;
while (s[j] != ' '){
nr = nr * 10 + s[j] - '0';
++j;
}
a = nr;
++j;
nr = 0;
while (j<s.size()){
nr = nr * 10 + s[j] - '0';
++j;
}
b = nr;
No[a].push_back(make_pair(b,i));
No[b].push_back(make_pair(a, i));
++gr[a]; ++gr[b];
}
for (int i = 1; i <= N; ++i)
if (gr[i] % 2 == 1) {
of << -1; return 0;
}
euler(1);
}