Pagini recente » Istoria paginii runda/usu5/clasament | Cod sursa (job #647676) | Cod sursa (job #752778) | Istoria paginii utilizator/chelcea_adelina_gabriela_321cb | Cod sursa (job #1979752)
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 100010
#define MMAX 500010
using namespace std;
ofstream fout("ciclueuler.out");
ifstream fin("ciclueuler.in");
vector <pair<int,int> > v[NMAX];
int viz[MMAX], a[NMAX], n, m, x, y, s[MMAX], k, lastpoz[NMAX],ok;
void euler()
{
s[++k] = 1;
while(k > 0){
int nod = s[k];
int lg = v[nod].size();
ok = 1;
for(int i = lastpoz[nod]; i < lg; ++i){
if(viz[v[nod][i].second] == 0){
viz[v[nod][i].second] = 1;
s[++k] = v[nod][i].first;
lastpoz[nod] = i;
ok = 0;
break;
}
}
if(ok == 1) {
fout << nod << ' ';
k--;
}
}
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= m; ++i){
fin >> x >> y;
v[x].push_back({y,i});
v[y].push_back({x,i});
a[x]++;
a[y]++;
}
for(int i = 1; i <= n; ++i){
if(a[i]%2 == 1){
fout << -1;
return 0;
}
}
euler();
return 0;
}