fork download
  1.  
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5.  
  6. using ll = long long;
  7. const int MOD = 1000000007;
  8. const int MOD2 = 998244353;
  9. const ll INF = 1e18;
  10. const int MX = 1000001; //check the limits, dummy
  11.  
  12.  
  13. ll modExp(ll base, ll power) {
  14. if (power == 0) {
  15. return 1;
  16. } else {
  17. ll cur = modExp(base, power / 2); cur = cur * cur; cur = cur % MOD;
  18. if (power % 2 == 1) cur = cur * base;
  19. cur = cur % MOD;
  20. return cur;
  21. }
  22. }
  23.  
  24. ll inv(ll base) {
  25. return modExp(base, MOD-2);
  26. }
  27.  
  28.  
  29. ll mul(ll A, ll B) {
  30. return (A*B)%MOD;
  31. }
  32.  
  33. ll add(ll A, ll B) {
  34. return (A+B)%MOD;
  35. }
  36.  
  37. ll dvd(ll A, ll B) {
  38. return mul(A, inv(B));
  39. }
  40.  
  41. ll sub(ll A, ll B) {
  42. return (A-B+MOD)%MOD;
  43. }
  44. ll cielDiv(ll A , ll B) {
  45. return (A + B - 1)/B;
  46. }
  47.  
  48. ll* facs = new ll[MX];
  49. ll* facInvs = new ll[MX];
  50.  
  51. ll choose(ll a, ll b) {
  52. if (b > a) return 0;
  53. if (a < 0) return 0;
  54. if (b < 0) return 0;
  55. ll cur = facs[a];
  56. cur = mul(cur, facInvs[b]);
  57. cur = mul(cur, facInvs[a-b]);
  58. return cur;
  59. }
  60.  
  61. void initFacs() {
  62. facs[0] = 1;
  63. facInvs[0] = 1;
  64. for (int i = 1 ; i < MX ; i ++ ) {
  65. facs[i] = (facs[i-1] * i) % MOD;
  66. facInvs[i] = inv(facs[i]);
  67. }
  68. }
  69. ll n, m,k ;
  70. const int maxn = 200005;
  71. vector<ll> adj[maxn];
  72. bool seen[maxn];
  73. vector<ll> eulers;
  74. void dfs(ll a, ll p) {
  75. seen[a] = true;
  76. eulers.push_back(a);
  77. for (ll c : adj[a]) {
  78. if (!seen[c]) {
  79. dfs(c,a);
  80. }
  81. }
  82. eulers.push_back(a);
  83. }
  84.  
  85.  
  86.  
  87.  
  88. int main() {
  89. ios_base::sync_with_stdio(0); cin.tie(0);
  90. cin >> n >> m >> k ;
  91. for (int i = 0 ;i < m ; i ++) {
  92. ll a , b; cin >> a >> b;
  93. adj[a].push_back(b);
  94. adj[b].push_back(a);
  95. }
  96. dfs(1,0);
  97. // 1) correct ceiling
  98. ll limit = ( (ll)eulers.size() + k - 1 ) / k;
  99.  
  100. // 2) print exactly k lines
  101. int printed = 0, p = 0;
  102. while (printed < k) {
  103. if (p < (int)eulers.size()) {
  104. int sz = min<ll>(limit, eulers.size() - p);
  105. cout << sz;
  106. for (int i = 0; i < sz; i++, p++) {
  107. cout << ' ' << eulers[p];
  108. }
  109. cout << "\n";
  110. } else {
  111. // pad with a trivial single‐node tour
  112. cout << "1 1\n";
  113. }
  114. printed++;
  115. }
  116.  
  117. return 0;
  118. }
  119.  
Success #stdin #stdout 0.01s 8280KB
stdin
5 4 2
1 2
1 3
1 4
1 5
stdout
5 1 2 2 3 3
5 4 4 5 5 1