Advertisement
Georgiy1108

Untitled

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