fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN = 1e7+5;
  4.  
  5. int par[MAXN+1];
  6. int rnk[MAXN+1];
  7.  
  8. void make(int v){
  9. par[v]=v;
  10. rnk[v]=0;
  11. }
  12.  
  13. int findPar(int v){
  14. if(v == par[v])return v;
  15. return par[v] = findPar(par[v]);
  16. }
  17.  
  18. void unite(int a1 ,int b1){
  19. int a = findPar(a1);
  20. int b = findPar(b1);
  21.  
  22. if(a == b){return;}
  23. if(rnk[a]<rnk[b])swap(a,b);
  24.  
  25.  
  26. par[b]=a;
  27. if(rnk[a]==rnk[b])rnk[a]+=1;
  28. }
  29. int main() {
  30. int n ;
  31. cin>>n;
  32.  
  33. for(int i = 1;i<= n ;i++){
  34. make(i);
  35. }
  36.  
  37.  
  38. unite(2, 3);
  39. unite(3, 4);
  40. unite(1, 5);
  41.  
  42. cout << findPar(4) << '\n';
  43. cout << findPar(5) << '\n';
  44.  
  45. return 0;
  46. }
Success #stdin #stdout 0.01s 5604KB
stdin
10
stdout
2
1