Pagini recente » Cod sursa (job #1128832) | Rating Stinga Petru (petru13) | Cod sursa (job #1520521) | Cod sursa (job #2748718) | Cod sursa (job #3194820)
#include <fstream>
#include <utility>
#include <vector>
#include <bitset>
std::ifstream fin("apm.in");
std::ofstream fout("apm.out");
const int nMax = 5e5;
std::bitset<nMax> vis;
std::vector<int> cycle;
std::vector<std::vector<std::pair<int, int>>> multigraph;
void euler (int currentNode) {
while (multigraph[currentNode].size () > 0) {
int nextNode = multigraph[currentNode].back ().first;
int edge = multigraph[currentNode].back ().second;
multigraph[currentNode].pop_back ();
if (vis[edge] == false)
vis[edge] = true, euler (nextNode);
}
cycle.emplace_back (currentNode);
}
int main () {
int n, m; fin >> n >> m;
std::vector<int> degree(n, 0);
multigraph.assign (n, std::vector<std::pair<int, int>> ());
for (int i = 0; i < m; i += 1) {
int x, y; fin >> x >> y; x -= 1, y -= 1;
degree[x] += 1, degree[y] += 1;
multigraph[x].emplace_back (std::make_pair (y, i));
if (x != y)
multigraph[y].emplace_back (std::make_pair (x, i));
}
for (int i = 0; i < n; i += 1)
if (degree[i] % 2 != 0) {
return 0;
}
euler (0);
for (int i = 0; i < (int) cycle.size () - 1; i += 1)
fout << cycle[i] + 1 << ' ';
return 0;
}