Naxocist

Building Roads

Apr 28th, 2022
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define INF 1e9
  5.  
  6. using ll = long long;
  7. using pi = pair<int, int>;
  8. using vi = vector<int>;
  9. using pii = pair<pi, vi>;
  10.  
  11. const int N = 1e5 + 3;
  12. int dsu[N];
  13. bool chk[N];
  14.  
  15. int par(int u){
  16.     return (dsu[u] == u ? u : dsu[u] = par(dsu[u]));
  17. }
  18.  
  19. void un(int u, int v){
  20.     int x = par(u), y = par(v);
  21.     if(x == y) return ;
  22.     dsu[x] = y;
  23. }
  24.  
  25.  
  26. int main(){
  27.     ios_base::sync_with_stdio(false); cin.tie(nullptr);
  28.     int n, m; cin >> n >> m;
  29.    
  30.     for(int i=1; i<=n; ++i) dsu[i] = i;
  31.    
  32.     int G = n;
  33.     for(int i=0; i<m; ++i){
  34.         int u, v; cin >> u >> v;
  35.         if(par(u) != par(v)) G--, un(u, v);
  36.     }
  37.  
  38.     cout << G-1 << '\n';
  39.  
  40.     vector<int> v;
  41.     for(int i=1; i<=n; ++i) {
  42.         int g = par(i);
  43.         if(!chk[g]){
  44.             chk[g] = 1;
  45.             v.push_back(g);
  46.         }
  47.     }
  48.     for(int i=0; i<v.size()-1; ++i){
  49.         cout << v[i] << ' ' << v[i+1] << '\n';
  50.     }
  51.  
  52.     return 0;
  53.  
  54. }
  55.  
  56.  
Advertisement
Add Comment
Please, Sign In to add comment