Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- vector<int> p, _size;
- int find(int v)
- {
- if(p[v] == v)
- return v;
- return p[v] = find(p[v]);
- }
- bool union_s(int a, int b)
- {
- a = find(a);
- b = find(b);
- if (a != b)
- {
- if (_size[a] < _size[b])
- swap(a, b);
- p[b] = a;
- _size[a] += _size[b];
- return true;
- }
- else
- return false;
- }
- main()
- {
- int n, m, min_i = 1;
- cin >> n >> m;
- vector<pair<int, int>> a(n);
- p.resize(n + 1);
- for(int i = 1; i <= n; i++)
- p[i] = i;
- _size.resize(n + 1, 0);
- for(int i = 0; i < n; i++)
- {
- cin >> a[i].first;
- if(a[i] < a[min_i - 1])
- min_i = i + 1;
- a[i].second = i + 1;
- }
- for(int i = 0; i < m; i++)
- {
- int f, t;
- cin >> f >> t;
- union_s(f, t);
- }
- sort(a.begin(), a.end());
- vector<pair<int, int>> ans;
- for(auto i : a)
- if(union_s(i.second, min_i))
- ans.push_back({i.second, min_i});
- cout << ans.size() << "\n";
- for(auto i : ans)
- cout << i.first << " " << i.second << "\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement