Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <map>
- #include <vector>
- #include <algorithm>
- #include <unordered_set>
- #include <set>
- using namespace std;
- vector<bool> used;
- vector<set<int>> g;
- vector<vector<int>> ans;
- set<pair<int,int>> fict;
- vector<pair<int,vector<int>>> z;
- int k=0;
- void dfs (int h) {
- used[h]= true;
- z[k].second.push_back(h);
- z[k].first++;
- for (auto e : g[h]) {
- if (used[e]!=true) {
- dfs(e);
- }
- }
- }
- int s;
- int ff(int h) {
- while (!g[h].empty()) {
- int e = *g[h].begin();
- g[h].erase(e);
- g[e].erase(h);
- if (fict.count({h,e})==1){
- s+=1;
- ff(e);
- }
- else {
- ff(e);
- }
- }
- ans[s].push_back(h);
- }
- int main() {
- // int n;
- // cin >> n;
- // vector < vector<int> >g(n + 3, vector<int>(3));
- // g[1][0] = 1;
- // g[1][1] = 1;
- // g[1][2] = 0;
- // g[2][0] = 2;
- // g[2][1] = 1;
- // g[2][2] = 1;
- // for (int i = 3; i < n + 1; i++) {
- // g[i][0] = g[i - 1][1] + g[i - 1][2] + g[i - 1][0];
- // g[i][1] = g[i - 1][0];
- // g[i][2] = g[i - 1][1];
- // }
- // cout << g[n][0] + g[n][1] + g[n][2];
- // int n, x;
- // cin >> n;
- // vector<int> g(n+2);
- //
- // for (int i = 0; i < n; i++) {
- // cin >> x;
- // g[i] = x;
- // }
- //
- // for (int i = 2; i <= n; i++) {
- // if (g[i - 1] > g[i - 2]) {
- // g[i] += g[i - 2];
- // } else {
- // g[i] += g[i - 1];
- // }
- // }
- // cout << g[n - 1];
- // int n, m, x;
- // cin >> n >> m;
- // vector<vector<int>> g(n + 1, vector<int>(m + 1, 0));
- // for (int i = 1; i < n + 1; i++) {
- // for (int j = 1; j < m + 1; j++) {
- // cin >> x;
- // g[i][j] = x;
- // }
- // }
- // for (int i = 1; i < n + 1; i++) {
- // for (int j = 1; j < m + 1; j++) {
- // g[i][j] += max(g[i - 1][j], g[i][j - 1]);
- // }
- // }
- // cout << g[n][m] << endl;
- // x = m;
- // vector<char> k;
- // int y = n;
- // while (x != 1 || y != 1) {
- // if (g[y - 1][x] < g[y][x - 1]) {
- // x -= 1;
- // k.push_back('R');
- // } else {
- // y -= 1;
- // k.push_back('D');
- // }
- // }
- // for (int i = k.size() - 1; i > - 1; i--) {
- // cout << k[i] << ' ';
- // }
- // int n;
- // cin >> n;
- // vector<vector<int>> g(n + 2, vector<int>(2));
- // g[0][0] = 1;
- // g[0][1] = 2;
- // for (int i = 1; i < n + 1; i++) {
- // g[i][0] = g[i - 1][1];
- // g[i][1] = g[i - 1][0] * 2 + g[i - 1][1] * 2;
- // }
- // cout << g[n - 1][0] + g[n - 1][1];
- // int x, y;
- // cin >> x >> y;
- // vector<vector<int>> g(8, vector<int>(10, 0));
- // y--;
- // g[y][x] = 1;
- // y++;
- // for (int i = y; i < 8; i++) {
- // for (int j = 1; j < 9; j++) {
- // g[i][j] = g[i - 1][j - 1] + g[i - 1][j + 1];
- // }
- // }
- // int h = 0;
- // for (auto e : g[7]) {
- // h += e;
- // }
- // cout << h;
- // int n, m, x;
- // cin >> n >> m;
- // int ma = 0;
- // int maX = 1;
- // int maY = 1;
- // vector<vector<int>> g(n + 1, vector<int> (m + 1, 0));
- // for (int i = 1; i < n + 1; i++) {
- // for (int j = 1; j < m + 1; j++) {
- // cin >> x;
- // g[i][j] = x;
- // }
- // }
- // int X, Y;
- // for (int i = 1; i < n + 1; i++) {
- // for (int j = 1; j < m + 1; j++) {
- // if (g[i][j] > 0) {
- // X = j - (min(g[i][j - 1], g[i - 1][j]) + 1) + 1;
- // Y = i - (min(g[i][j - 1], g[i - 1][j]) + 1) + 1;
- // if (g[i][j - 1] == g[i - 1][j] && g[Y][X] == 0) {
- // g[i][j] = min(g[i][j - 1], g[i - 1][j]);
- // } else {
- // g[i][j] = min(g[i][j - 1], g[i - 1][j]) + 1;
- // }
- // if (ma < g[i][j]) {
- // ma = g[i][j];
- // maX = j - ma + 1;
- // maY = i - ma + 1;
- // }
- // }
- // }
- // }
- // cout << ma << endl << maX << ' ' << maY;
- // int n, m, k;
- // cin >> n >> m >> k;
- // map<int,vector<int>> s;
- // int x;
- // vector<int> a;
- // for ( int i=0;i<n;i++) {
- // cin >> x;
- // a.push_back(x);
- // s[x].push_back(i);
- // }
- // sort(a.begin(), a.end());
- // reverse(a.begin(), a.end());
- // vector<pair<int,int>> ans;
- // int it = 0;
- // int f, q, d;
- // int h=0;
- // while (m !=0) {
- // k -= s[a[it]].size(); // кол-во необходимых еще разныз оружий
- // f = m - k; //кол-во закупаемых этой мощности
- // q = f / s[a[it]].size(); //кол-во оружий каждого вида этого мощности
- // d = f - s[a[it]].size() * q; //дополнительно
- // m-= f; //оставшиеся
- // h=0;
- // for (int i = 0; i< d;i++) {
- // ans.push_back({s[a[it]][i], q+1});
- // h+=1;
- // }
- // for (int i = h; i< s[a[it]].size();i++) {
- // ans.push_back({s[a[it]][i], q});
- // }
- // it++;
- // }
- // for (int i = 0; i<ans.size(); i++) {
- // for (int j= 0;j<ans[i].second;j++) {
- // cout << ans[i].first + 1 << ' ';
- // }
- // }
- // int n, m;
- // cin >> n >> m;
- // int x, y;
- // g.resize(n);
- // for (int i = 0; i<m; i++) {
- // cin >> x >> y;
- // x--;
- // y--;
- // g[x].push_back(y);
- // g[y].push_back(x);
- // }
- // used.assign(n,false);
- // z.resize(n);
- // for (int i = 0; i < n; i++) {
- // if (used[i]==false) {
- // dfs(i);
- // k++;
- // }
- // }
- // sort(z.begin(),z.end());
- // reverse(z.begin(),z.end());
- //
- // for (auto e : z) {
- // if (e.first!=0) {
- // cout<<e.first<<endl;
- // for (auto t : e.second) {
- // cout<<t+1<<' ';
- // }
- // cout<<endl;
- // }
- // }
- int n, m,x,y;
- cin >> n >> m;
- g.resize(n);
- for (int i = 0; i < n; i++) {
- cin >> x >> y;
- x--;
- y--;
- g[x].insert(y);
- g[y].insert(x);
- }
- int k=-1;
- for (int i = 0; i < n; i++) {
- if (g[i].size()%2!=0 && k==-1) {
- k=i;
- }
- else if (g[i].size()%2!=0 && k!=-1) {
- g[k].insert(i);
- g[i].insert(k);
- fict.insert({k,i});
- fict.insert({i,k});
- k=-1;
- }
- }
- s=0;
- ans.resize(m+1);
- ff(0);
- cout<<s<<endl;
- for (auto e : ans) {
- if ((int) e.size()==0) {
- continue;
- }
- for (auto i : e ) {
- cout<<i<<' ';
- }
- cout<< endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment