Combothermal

Untitled

Jun 13th, 2020
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. #pragma GCC optimize ("O3")
  2. #pragma GCC target ("sse4")
  3.  
  4. #include <bits/stdc++.h>
  5.  
  6. using namespace std;
  7.  
  8. typedef long long ll;
  9. typedef long double ld;
  10. typedef complex<ld> cd;
  11.  
  12. typedef pair<int, int> pi;
  13. typedef pair<ll,ll> pl;
  14. typedef pair<ld,ld> pd;
  15.  
  16. typedef vector<int> vi;
  17. typedef vector<ld> vd;
  18. typedef vector<ll> vl;
  19. typedef vector<pi> vpi;
  20. typedef vector<pl> vpl;
  21. typedef vector<cd> vcd;
  22.  
  23. #define FOR(i, a, b) for (int i=a; i<(b); i++)
  24. #define F0R(i, a) for (int i=0; i<(a); i++)
  25. #define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
  26. #define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)
  27.  
  28. #define sz(x) (int)(x).size()
  29. #define mp make_pair
  30. #define pb push_back
  31. #define f first
  32. #define s second
  33. #define lb lower_bound
  34. #define ub upper_bound
  35. #define all(x) x.begin(), x.end()
  36. #define ins insert
  37.  
  38. mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  39.  
  40. const int MOD = 1000000007;
  41. const char nl = '\n';
  42. const int MX = 100001; //check the limits, dummy
  43. int N, M, K;
  44. vector<vi> graph(MX);
  45. vector<vi> L(MX);
  46. stack<int> st;
  47. int dep[MX];
  48.  
  49. bool dfs(int v, int p, int d) {
  50. dep[v] = d;
  51. L[d].pb(v);
  52. st.push(v);
  53. F0R(i, sz(graph[v])) {
  54. int nxt = graph[v][i];
  55. if (nxt == p) continue;
  56. if (dep[nxt] == -1) {
  57. if (dfs(nxt, v, d+1)) return true;
  58. } else if (dep[nxt] + K > d && dep[nxt] < d) {
  59. cout << 2 << nl;
  60. cout << d - dep[nxt] + 1 << nl;
  61. F0R(i, d - dep[nxt] + 1) {
  62. cout << st.top()+1 << " ";
  63. st.pop();
  64. }
  65. return true;
  66. }
  67. }
  68. st.pop();
  69. return false;
  70. }
  71.  
  72. int main() {
  73. ios_base::sync_with_stdio(0); cin.tie(0);
  74.  
  75. cin >> N >> M >> K;
  76.  
  77. F0R(i, M) {
  78. int A, B; cin >> A >> B; A--; B--;
  79. graph[A].pb(B);
  80. graph[B].pb(A);
  81. }
  82. F0R(i, N) dep[i] = -1;
  83. if (dfs(0, 0, 0)) {
  84. return 0;
  85. }
  86.  
  87. vi op[2];
  88. F0R(i, K) {
  89. F0R(j, sz(L[i])) {
  90. op[i%2].pb(L[i][j]);
  91. }
  92. }
  93.  
  94. int x = 0; if (sz(op[1]) > sz(op[0])) x = 1;
  95.  
  96. cout << 1 << nl;
  97. F0R(i, (K+1)/2) {
  98. cout << op[x][i]+1 << " ";
  99. }
  100. cout << nl;
  101. return 0;
  102. }
  103.  
  104. // read the question correctly (ll vs int)
  105. // template by bqi343
Advertisement
Add Comment
Please, Sign In to add comment