Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- vector<vector<int>> g;
- vector<int> color;
- void dfs(int cur, vector<bool> &used, int c)
- {
- used[cur] = true;
- color[cur] = c;
- for(auto i : g[cur])
- if(!used[i])
- dfs(i, used, c);
- }
- main()
- {
- int n, m, min_i = 1;
- cin >> n >> m;
- vector<pair<int, int>> a(n);
- g.resize(n + 1, vector<int> ());
- color.resize(n + 1);
- vector<int> v;
- 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;
- g[f].push_back(t);
- g[t].push_back(f);
- }
- sort(a.begin(), a.end());
- vector<bool> used(n + 1, false);
- int c = 0;
- for(int i = 1; i <= n; i++)
- {
- vector<int> v;
- if(!used[i])
- {
- dfs(i, used, c);
- c++;
- }
- }
- vector<bool> used_color(n + 1, false);
- used_color[color[min_i]] = true;
- vector<pair<int, int>> ans;
- for(auto i : a)
- {
- if(!used_color[color[i.second]])
- {
- ans.push_back({i.second, min_i});
- used_color[color[i.second]] = true;
- }
- }
- cout << ans.size() << "\n";
- for(auto i : ans)
- cout << i.first << " " << i.second << "\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement