Advertisement
cincout

Эйлеров цикл (путь)

Mar 15th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. const int N = 1500;
  5. const int M = 100005;
  6. vector <pair<int, int>> a[N], g;
  7. vector <int> ans;
  8. int dead[M];
  9.  
  10. void dfs(int u) {
  11. while (!a[u].empty()) {
  12. int v = a[u].back().first;
  13. int e = a[u].back().second;
  14. a[u].pop_back();
  15. if (dead[e]) continue;
  16. dead[e] = 1;
  17. dfs(v);
  18. ans.push_back(u);
  19. }
  20. }
  21.  
  22. void solve() {
  23. int n;
  24. cin >> n;
  25. for (int i = 1; i <= n; ++i) {
  26. int sz;
  27. cin >> sz;
  28. while (sz--) {
  29. int k, t;
  30. cin >> k >> t;
  31. g.emplace_back(i, k);
  32. }
  33. }
  34. int cur = 0;
  35. for (auto i : g) {
  36. int u = i.first;
  37. int v = i.second;
  38. if (u < v) {
  39. a[u].emplace_back(v, cur);
  40. a[v].emplace_back(u, cur);
  41. cur++;
  42. }
  43. }
  44. vector <int> nch;
  45. for (int i = 1; i <= n; ++i) {
  46. if (a[i].size() % 2) {
  47. nch.push_back(i);
  48. }
  49. }
  50. if (nch.size() == 0) {
  51. ans.push_back(1);
  52. dfs(1);
  53. cout << ans.size() - 1 << '\n';
  54. for (int i : ans) {
  55. cout << i << ' ';
  56. }
  57. }
  58. else {
  59. pair <int, int> Add = {nch[0], nch[1]};
  60. if (nch[0] > nch[1]) swap(nch[0], nch[1]);
  61. a[Add.first].emplace_back(Add.second, cur);
  62. a[Add.second].emplace_back(Add.first, cur);
  63. ans.push_back(1);
  64. dfs(1);
  65. for (int i = 1; i < ans.size(); ++i) {
  66. int mn = min(ans[i - 1], ans[i]);
  67. int mx = max(ans[i - 1], ans[i]);
  68. pair <int, int> ty = {mn, mx};
  69. if (ty == Add) {
  70. vector <int> vyv;
  71. for (int j = i; j < ans.size() - 1; ++j)
  72. vyv.push_back(ans[j]);
  73. for (int j = 0; j < i; ++j)
  74. vyv.push_back(ans[j]);
  75. cout << vyv.size() - 1 << '\n';
  76. for (int i : vyv)
  77. cout << i << ' ';
  78. exit(0);
  79. }
  80. }
  81. }
  82. }
  83. signed main() {
  84. ios::sync_with_stdio(false);
  85. cin.tie(0);
  86. solve();
  87. return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement