Advertisement
Georgiy1108

Untitled

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