nq1s788

Untitled

Feb 15th, 2026
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.08 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <map>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <unordered_set>
  7. #include <set>
  8. using namespace std;
  9.  
  10.  
  11.  
  12. vector<bool> used;
  13. vector<set<int>> g;
  14. vector<vector<int>> ans;
  15. set<pair<int,int>> fict;
  16. vector<pair<int,vector<int>>> z;
  17. int k=0;
  18. void dfs (int h) {
  19. used[h]= true;
  20. z[k].second.push_back(h);
  21. z[k].first++;
  22. for (auto e : g[h]) {
  23. if (used[e]!=true) {
  24. dfs(e);
  25. }
  26.  
  27. }
  28. }
  29. int s;
  30. int ff(int h) {
  31. while (!g[h].empty()) {
  32. int e = *g[h].begin();
  33. g[h].erase(e);
  34. g[e].erase(h);
  35. if (fict.count({h,e})==1){
  36. s+=1;
  37. ff(e);
  38. }
  39. else {
  40. ff(e);
  41. }
  42. }
  43. ans[s].push_back(h);
  44. }
  45. int main() {
  46. // int n;
  47. // cin >> n;
  48. // vector < vector<int> >g(n + 3, vector<int>(3));
  49. // g[1][0] = 1;
  50. // g[1][1] = 1;
  51. // g[1][2] = 0;
  52. // g[2][0] = 2;
  53. // g[2][1] = 1;
  54. // g[2][2] = 1;
  55. // for (int i = 3; i < n + 1; i++) {
  56. // g[i][0] = g[i - 1][1] + g[i - 1][2] + g[i - 1][0];
  57. // g[i][1] = g[i - 1][0];
  58. // g[i][2] = g[i - 1][1];
  59. // }
  60. // cout << g[n][0] + g[n][1] + g[n][2];
  61. // int n, x;
  62. // cin >> n;
  63. // vector<int> g(n+2);
  64. //
  65. // for (int i = 0; i < n; i++) {
  66. // cin >> x;
  67. // g[i] = x;
  68. // }
  69. //
  70. // for (int i = 2; i <= n; i++) {
  71. // if (g[i - 1] > g[i - 2]) {
  72. // g[i] += g[i - 2];
  73. // } else {
  74. // g[i] += g[i - 1];
  75. // }
  76. // }
  77. // cout << g[n - 1];
  78. // int n, m, x;
  79. // cin >> n >> m;
  80. // vector<vector<int>> g(n + 1, vector<int>(m + 1, 0));
  81. // for (int i = 1; i < n + 1; i++) {
  82. // for (int j = 1; j < m + 1; j++) {
  83. // cin >> x;
  84. // g[i][j] = x;
  85. // }
  86. // }
  87. // for (int i = 1; i < n + 1; i++) {
  88. // for (int j = 1; j < m + 1; j++) {
  89. // g[i][j] += max(g[i - 1][j], g[i][j - 1]);
  90. // }
  91. // }
  92. // cout << g[n][m] << endl;
  93. // x = m;
  94. // vector<char> k;
  95. // int y = n;
  96. // while (x != 1 || y != 1) {
  97. // if (g[y - 1][x] < g[y][x - 1]) {
  98. // x -= 1;
  99. // k.push_back('R');
  100. // } else {
  101. // y -= 1;
  102. // k.push_back('D');
  103. // }
  104. // }
  105. // for (int i = k.size() - 1; i > - 1; i--) {
  106. // cout << k[i] << ' ';
  107. // }
  108. // int n;
  109. // cin >> n;
  110. // vector<vector<int>> g(n + 2, vector<int>(2));
  111. // g[0][0] = 1;
  112. // g[0][1] = 2;
  113. // for (int i = 1; i < n + 1; i++) {
  114. // g[i][0] = g[i - 1][1];
  115. // g[i][1] = g[i - 1][0] * 2 + g[i - 1][1] * 2;
  116. // }
  117. // cout << g[n - 1][0] + g[n - 1][1];
  118. // int x, y;
  119. // cin >> x >> y;
  120. // vector<vector<int>> g(8, vector<int>(10, 0));
  121. // y--;
  122. // g[y][x] = 1;
  123. // y++;
  124. // for (int i = y; i < 8; i++) {
  125. // for (int j = 1; j < 9; j++) {
  126. // g[i][j] = g[i - 1][j - 1] + g[i - 1][j + 1];
  127. // }
  128. // }
  129. // int h = 0;
  130. // for (auto e : g[7]) {
  131. // h += e;
  132. // }
  133. // cout << h;
  134. // int n, m, x;
  135. // cin >> n >> m;
  136. // int ma = 0;
  137. // int maX = 1;
  138. // int maY = 1;
  139. // vector<vector<int>> g(n + 1, vector<int> (m + 1, 0));
  140. // for (int i = 1; i < n + 1; i++) {
  141. // for (int j = 1; j < m + 1; j++) {
  142. // cin >> x;
  143. // g[i][j] = x;
  144. // }
  145. // }
  146. // int X, Y;
  147. // for (int i = 1; i < n + 1; i++) {
  148. // for (int j = 1; j < m + 1; j++) {
  149. // if (g[i][j] > 0) {
  150. // X = j - (min(g[i][j - 1], g[i - 1][j]) + 1) + 1;
  151. // Y = i - (min(g[i][j - 1], g[i - 1][j]) + 1) + 1;
  152. // if (g[i][j - 1] == g[i - 1][j] && g[Y][X] == 0) {
  153. // g[i][j] = min(g[i][j - 1], g[i - 1][j]);
  154. // } else {
  155. // g[i][j] = min(g[i][j - 1], g[i - 1][j]) + 1;
  156. // }
  157. // if (ma < g[i][j]) {
  158. // ma = g[i][j];
  159. // maX = j - ma + 1;
  160. // maY = i - ma + 1;
  161. // }
  162. // }
  163. // }
  164. // }
  165. // cout << ma << endl << maX << ' ' << maY;
  166.  
  167. // int n, m, k;
  168. // cin >> n >> m >> k;
  169. // map<int,vector<int>> s;
  170. // int x;
  171. // vector<int> a;
  172. // for ( int i=0;i<n;i++) {
  173. // cin >> x;
  174. // a.push_back(x);
  175. // s[x].push_back(i);
  176. // }
  177. // sort(a.begin(), a.end());
  178. // reverse(a.begin(), a.end());
  179. // vector<pair<int,int>> ans;
  180. // int it = 0;
  181. // int f, q, d;
  182. // int h=0;
  183. // while (m !=0) {
  184. // k -= s[a[it]].size(); // кол-во необходимых еще разныз оружий
  185. // f = m - k; //кол-во закупаемых этой мощности
  186. // q = f / s[a[it]].size(); //кол-во оружий каждого вида этого мощности
  187. // d = f - s[a[it]].size() * q; //дополнительно
  188. // m-= f; //оставшиеся
  189. // h=0;
  190. // for (int i = 0; i< d;i++) {
  191. // ans.push_back({s[a[it]][i], q+1});
  192. // h+=1;
  193. // }
  194. // for (int i = h; i< s[a[it]].size();i++) {
  195. // ans.push_back({s[a[it]][i], q});
  196. // }
  197. // it++;
  198. // }
  199. // for (int i = 0; i<ans.size(); i++) {
  200. // for (int j= 0;j<ans[i].second;j++) {
  201. // cout << ans[i].first + 1 << ' ';
  202. // }
  203. // }
  204. // int n, m;
  205. // cin >> n >> m;
  206. // int x, y;
  207. // g.resize(n);
  208. // for (int i = 0; i<m; i++) {
  209. // cin >> x >> y;
  210. // x--;
  211. // y--;
  212. // g[x].push_back(y);
  213. // g[y].push_back(x);
  214. // }
  215. // used.assign(n,false);
  216. // z.resize(n);
  217. // for (int i = 0; i < n; i++) {
  218. // if (used[i]==false) {
  219. // dfs(i);
  220. // k++;
  221. // }
  222. // }
  223. // sort(z.begin(),z.end());
  224. // reverse(z.begin(),z.end());
  225. //
  226. // for (auto e : z) {
  227. // if (e.first!=0) {
  228. // cout<<e.first<<endl;
  229. // for (auto t : e.second) {
  230. // cout<<t+1<<' ';
  231. // }
  232. // cout<<endl;
  233. // }
  234. // }
  235.  
  236. int n, m,x,y;
  237. cin >> n >> m;
  238. g.resize(n);
  239. for (int i = 0; i < n; i++) {
  240. cin >> x >> y;
  241. x--;
  242. y--;
  243. g[x].insert(y);
  244. g[y].insert(x);
  245. }
  246. int k=-1;
  247. for (int i = 0; i < n; i++) {
  248. if (g[i].size()%2!=0 && k==-1) {
  249. k=i;
  250. }
  251. else if (g[i].size()%2!=0 && k!=-1) {
  252. g[k].insert(i);
  253. g[i].insert(k);
  254.  
  255. fict.insert({k,i});
  256. fict.insert({i,k});
  257. k=-1;
  258. }
  259. }
  260. s=0;
  261. ans.resize(m+1);
  262. ff(0);
  263. cout<<s<<endl;
  264. for (auto e : ans) {
  265. if ((int) e.size()==0) {
  266. continue;
  267. }
  268. for (auto i : e ) {
  269. cout<<i<<' ';
  270. }
  271. cout<< endl;
  272. }
  273. }
Advertisement
Add Comment
Please, Sign In to add comment