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> a, color, ans;
- void dfs(int cur, vector<bool> &used, vector<int> &v, int c)
- {
- used[cur] = true;
- color[cur] = c;
- v.push_back(cur);
- for(auto i : g[cur])
- if(!used[i])
- dfs(i, used, v, c);
- }
- main()
- {
- int n, m, min_i = 1;
- cin >> n >> m;
- a.resize(n + 1);
- g.resize(n + 1, vector<int> ());
- color.resize(n + 1);
- for(int i = 1; i <= n; i++)
- {
- cin >> a[i];
- if(a[i] < a[min_i])
- min_i = i;
- }
- for(int i = 0; i < m; i++)
- {
- int f, t;
- cin >> f >> t;
- g[f].push_back(t);
- g[t].push_back(f);
- }
- 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, v, c);
- int j = 0;
- for(int k = 1; k < v.size(); k++)
- if(a[v[j]] > a[v[k]])
- j = k;
- ans.push_back(v[j]);
- c++;
- }
- }
- cout << ans.size() << "\n";
- for(auto i : ans)
- if(color[i] != color[min_i])
- cout << i << " " << min_i << "\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement