Pagini recente » Cod sursa (job #578767) | Cod sursa (job #2764769) | Cod sursa (job #936736) | Cod sursa (job #1103349) | Cod sursa (job #1615718)
#include <fstream>
#include <vector>
#include <bitset>
#define MAXM 500010
using namespace std;
ifstream is("cicluleuler.in");
ofstream os("cicluleuler.out");
struct Edge{
int x, y;
};
int n, m;
Edge muchii[MAXM];
vector<vector<int>> G;
vector<int> Cycle;
bitset <MAXM> viz;
int IsEulerian()
{
for(int i = 1; i <= n; ++i)
if(G[i].size() & 1) return 0;
return 1;
}
inline void Dfs(int node)
{
while(G[node].size())
{
if(viz[G[node].back()])
{
G[node].pop_back();
continue;
}
viz[G[node].back()] = 1;
Dfs(muchii[G[node].back()].x + muchii[G[node].back()].y - node);
}
Cycle.push_back(node);
}
int main()
{
is >> n >> m;
G = vector<vector<int>>(n+1);
//viz = vector<bool>(MAXN);
int x, y;
for(int i = 1; i <= m; ++i)
{
is >> x >> y;
G[x].push_back(i);
G[y].push_back(i);
muchii[i] = {x, y};
}
if(IsEulerian())
{
Dfs(1);
for(int i = 0; i < int(Cycle.size() - 1); ++i)
{
os << Cycle[i] << ' ';
}
os << '\n';
}
else
os << -1 << '\n';
is.close();
os.close();
return 0;
}