Pagini recente » Cod sursa (job #2627522) | Cod sursa (job #494386) | Cod sursa (job #1039243) | Cod sursa (job #3278697) | Cod sursa (job #3284279)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("ciclueuler.in");
ofstream g ("ciclueuler.out");
const int NMAX = 2e5;
const int MMAX = 5e5;
struct ura{
int a, b;
};
ura muchii[MMAX + 1];
vector<int> adj[NMAX + 1], rez;
int grad[NMAX + 1];
bool deleted[MMAX + 1]; //aflam daca muchia a fost sau nu stearsa
int next(int nod){
while(!adj[nod].empty() and deleted[adj[nod][adj[nod].size() - 1]])
adj[nod].pop_back();
if(adj[nod].empty())
return 0;
deleted[adj[nod][adj[nod].size() - 1]] = true;
return muchii[adj[nod][adj[nod].size() - 1]].a + muchii[adj[nod][adj[nod].size() - 1]].b - nod;
}
void euler(int nod){
while(int c = next(nod))
euler(c);
rez.push_back(nod);
}
int main()
{
int n, m;
f >> n >> m;
for(int i=1; i<=m; i++){
int x, y;
f >> x >> y;
muchii[i] = {x, y};
adj[x].push_back(i);
adj[y].push_back(i);
grad[x] ++;
grad[y] ++;
}
euler(1);
//cout << rez.size();
for(int i=1; i<=n; i++)
if(grad[i] % 2){
g << -1;
return 0;
}
if(rez.size() != m + 1){
g << -1;
return 0;
}
for(int i=0; i<rez.size()-1; i++)
g << rez[i] << ' ';
return 0;
}