Advertisement
Guest User

Untitled

a guest
Dec 13th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4.  
  5. using namespace std;
  6.  
  7. const int MAXN = 20000;
  8.  
  9. map< pair< int, int>, pair<int, int> > kek;
  10. vector< pair<int, int> > g[MAXN], order[MAXN];
  11. vector<bool> used[MAXN];
  12. int deg[MAXN];
  13. vector<int> bad;
  14. int ind;
  15.  
  16. void dfs(int v) {
  17. for (int i = 0; i < g[v].size(); i++) {
  18. int to = g[v][i].first;
  19. if (!used[v][i]) {
  20. used[v][i] = true;
  21. used[to][kek[make_pair(v, i)].second] = true;
  22. //cout << v + 1 << " " << i << ", " << to + 1 << " " << kek[make_pair(v, i)].second << endl;
  23. dfs(to);
  24. if (g[v][i].second) {
  25. ind++;
  26. } else
  27. order[ind].emplace_back(to, v);
  28. }
  29. }
  30. }
  31.  
  32. int main() {
  33. ios_base::sync_with_stdio(0);
  34. cin.tie(0);
  35. int n, m, x, y;
  36. cin >> n >> m;
  37. for (int i = 0; i < m; i++) {
  38. cin >> x >> y;
  39. x--, y--;
  40. g[x].emplace_back(y, 0);
  41. g[y].emplace_back(x, 0);
  42. kek[make_pair(x, g[x].size() - 1)] = make_pair(y, g[y].size() - 1);
  43. kek[make_pair(y, g[y].size() - 1)] = make_pair(x, g[x].size() - 1);
  44. used[x].push_back(false);
  45. used[y].push_back(false);
  46. deg[x]++;
  47. deg[y]++;
  48. }
  49. for (int i = 0; i < n; i++) {
  50. if (deg[i] & 1) bad.push_back(i);
  51. }
  52. for (int i = 0; i < bad.size(); i += 2) {
  53. g[bad[i]].emplace_back(bad[i + 1], 1);
  54. g[bad[i + 1]].emplace_back(bad[i], 1);
  55. kek[make_pair(bad[i], g[bad[i]].size() - 1)] = make_pair(bad[i + 1], g[bad[i + 1]].size() - 1);
  56. kek[make_pair(bad[i + 1], g[bad[i + 1]].size() - 1)] = make_pair(bad[i], g[bad[i]].size() - 1);
  57. used[bad[i]].push_back(false);
  58. used[bad[i + 1]].push_back(false);
  59. }
  60. dfs(0);
  61. /*for (int i = 0; i < ind + 1; i++) {
  62. for (auto &j : order[i])
  63. cout << j.first + 1 << " " << j.second + 1;
  64. cout << endl;
  65. }*/
  66. //cout << endl;
  67. cout << ind << endl;
  68. for (int i = 1; i < ind + 1; i++) {
  69. for (auto &j : order[i])
  70. cout << j.first + 1 << " ";
  71. if (i != ind or order[0].empty())
  72. cout << order[i][order[i].size() - 1].second + 1 << endl;
  73. }
  74. if (!order[0].empty()) {
  75. for (auto &j : order[0])
  76. cout << j.first + 1 << " ";
  77. cout << order[0][order[0].size() - 1].second + 1;
  78. }
  79. return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement