Pagini recente » Cod sursa (job #1336820) | Cod sursa (job #1993354) | Cod sursa (job #1801491) | Cod sursa (job #1561358) | Cod sursa (job #2570537)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("ciclueuler.in");
ofstream fout ("ciclueuler.out");
int n, m, i, x, y, muchie, nod, vecin;
int grad[100005];
bitset <500005> f;
vector <pair<int, int> > L[100005];
stack <int> stiva;
void dfs (int nod){
int vecin, i;
f[nod] = 1;
for (i=0; i<L[nod].size(); i++){
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}); //tin si muchiile
grad[x]++, grad[y]++;
}
dfs (1);
for (i=1; i<=n; i++){
if (f[i] == 0 || grad[i]%2 == 1){
fout << -1;
return 0;
}
}
f.reset();
stiva.push (1);
while (!stiva.empty()){
nod = stiva.top();
if (grad[nod] == 0){
if (stiva.size() != 1){
fout << nod << " ";
}
stiva.pop();
continue;
}
while (f[L[nod].back().second] == 1){
L[nod].pop_back();
}
vecin = L[nod].back().first;
muchie = L[nod].back().second;
stiva.push(vecin);
f[muchie] = 1;
L[nod].pop_back();
grad[vecin]--, grad[nod]--;
}
return 0;
}
//recapitulare