Advertisement
Guest User

Untitled

a guest
Dec 11th, 2018
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define pii pair<int ,int>
  3. #define pb push_back
  4. #define fi first
  5. #define re return
  6. #define se second
  7. #define all(x) x.begin(), x.end()
  8. #define piii pair<pair<int,int>, int>
  9. #define vpii vector<pii>
  10. #define vi vector<int>
  11. #define vpiii vector<piii>
  12. #define musek vector
  13.  
  14.  
  15. using namespace std;
  16.  
  17. typedef long long ll;
  18. typedef long double ld;
  19.  
  20. const int VERTEX = 20001;
  21.  
  22. musek<pii> G[VERTEX];
  23. musek<int> used(VERTEX);
  24. musek<int> odd_v;
  25. musek<pii> euler_cycle;
  26. musek<int> was(VERTEX * 2);
  27. musek<int> answer[VERTEX];
  28.  
  29.  
  30. void find_euler(int v, int edge) {
  31. for(auto p: G[v]) {
  32. int u = p.first;
  33. int j = p.second;
  34. if(!was[j]) {
  35. was[j] = 1;
  36. find_euler(u, j);
  37. }
  38. }
  39. euler_cycle.pb({v, edge});
  40. }
  41.  
  42. int main() {
  43. ios_base::sync_with_stdio(0);
  44. cin.tie(0);
  45. int n, m;
  46. cin >> n >> m;
  47. for (int i = 0; i < m; ++i) {
  48. int v, u;
  49. cin >> v >> u;
  50. v--, u--;
  51. G[v].pb({u, i});
  52. G[u].pb({v, i});
  53. }
  54. for (int i = 0; i < n; ++i) {
  55. if (G[i].size() % 2 != 0) {
  56. odd_v.pb(i);
  57. }
  58. }
  59. int c = m;
  60. for (int i = 0; i < odd_v.size(); i += 2) {
  61. int v = odd_v[i];
  62. int u = odd_v[i + 1];
  63. G[v].pb({u, c});
  64. G[u].pb({v, c++});
  65. }
  66. find_euler(0, -1);
  67. musek<int> ans;
  68. int ways = 0;
  69. reverse(all(euler_cycle));
  70. for (int i = 0; i < euler_cycle.size(); i++) {
  71. //cout << euler_cycle[i].fi + 1 << ' ' << euler_cycle[i].se << endl;
  72. if (i == 0) {
  73. answer[ways].pb(euler_cycle[0].fi);
  74. continue;
  75. }
  76. auto v = euler_cycle[i - 1];
  77. auto u = euler_cycle[i];
  78. if(u.se >= m) {
  79. ways++;
  80. }
  81. answer[ways].push_back(u.fi);
  82. }
  83. if(ways == 0) {
  84. cout << 1 << endl;
  85.  
  86. for(int i = 0; i < answer[0].size(); i++) {
  87. cout << answer[0][i] + 1 << ' ';
  88. }
  89.  
  90. return 0;
  91. }
  92.  
  93.  
  94. cout << ways << endl;
  95. for (int i = 1; i < ways; ++i) {
  96. for(auto x: answer[i]) {
  97. cout << x + 1 << ' ';
  98. }
  99. cout << endl;
  100. }
  101.  
  102. for(int i = 0; i < answer[ways].size() - 1; i++) {
  103. cout << answer[ways][i] + 1 << ' ';
  104. }
  105. for(int i = 0; i < answer[0].size(); i++) {
  106. cout << answer[0][i] + 1 << ' ';
  107. }
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement