Advertisement
Georgiy1108

Untitled

Oct 21st, 2019
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. vector<int> p, _size;
  6.  
  7. int find(int v)
  8. {
  9.     if(p[v] == v)
  10.         return v;
  11.     return p[v] = find(p[v]);
  12. }
  13.  
  14. bool union_s(int a, int b)
  15. {
  16.     a = find(a);
  17.     b = find(b);
  18.     if (a != b)
  19.     {
  20.         if (_size[a] < _size[b])
  21.             swap(a, b);
  22.         p[b] = a;
  23.         _size[a] += _size[b];
  24.         return true;
  25.     }
  26.     else
  27.         return false;
  28. }
  29.  
  30. main()
  31. {
  32.     int n, m, min_i = 1;
  33.     cin >> n >> m;
  34.     vector<pair<int, int>> a(n);
  35.     p.resize(n + 1);
  36.     for(int i = 1; i <= n; i++)
  37.         p[i] = i;
  38.     _size.resize(n + 1, 0);
  39.     for(int i = 0; i < n; i++)
  40.     {
  41.         cin >> a[i].first;
  42.         if(a[i] < a[min_i - 1])
  43.             min_i = i + 1;
  44.         a[i].second = i + 1;
  45.     }  
  46.     for(int i = 0; i < m; i++)
  47.     {
  48.         int f, t;
  49.         cin >> f >> t;
  50.         union_s(f, t);
  51.     }
  52.     sort(a.begin(), a.end());
  53.     vector<pair<int, int>> ans;
  54.     for(auto i : a)
  55.         if(union_s(i.second, min_i))
  56.             ans.push_back({i.second, min_i});
  57.  
  58.     cout << ans.size() << "\n";
  59.     for(auto i : ans)
  60.         cout << i.first << " " << i.second << "\n";
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement