Advertisement
Rana_093

DisjointSetUnion.cpp

Mar 19th, 2017
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int parent[105];
  6.  
  7.  
  8. struct side
  9. {
  10.  
  11.     int from;
  12.     int to;
  13.  
  14. } get;
  15.  
  16.  
  17. int findset(int n)
  18. {
  19.     if(parent[n]==n)
  20.     {
  21.         return n;
  22.     }
  23.     return parent[n]=findset(parent[n]);
  24.  
  25. }
  26.  
  27.  
  28. void setunion(int a,int b)
  29. {
  30.     int x = findset(a);
  31.     int y = findset(b);
  32.     if(x==y)
  33.     {
  34.         cout<<"They ar already friends"<<endl;
  35.     }
  36.     else
  37.     {
  38.         parent[a]=b;
  39.     }
  40.  
  41. }
  42.  
  43.  
  44.  
  45.  
  46.  
  47. int main()
  48. {
  49.     ios_base::sync_with_stdio(false);
  50.     vector<side>vec;
  51.  
  52.     int a,b,j,ara[1000];
  53.     int n;
  54.     cin>>n;
  55.  
  56.     for(int i =1; i<=n; i++)
  57.     {
  58.         parent[i]=i;
  59.     }
  60.  
  61.     for(int i = 0; i<n; i++)
  62.     {
  63.         cin>>a>>b;
  64.         get.from = a;
  65.         get.to = b;
  66.         vec.push_back(get);
  67.     }
  68.  
  69.     for(int i = 0; i<n; i++)
  70.     {
  71.         int u = vec[i].from;
  72.         int v = vec[i].to;
  73.         setunion(u,v);
  74.     }
  75.  
  76.     for(int i = 1; i <= 10; i++) printf("Parent of %d is %d\n", i, parent[i]);
  77.     cout << endl;
  78.     for(int i = 1; i <= 10; i++) printf("Set of %d is %d\n", i, findset(i)); // call findset for 10 elements
  79.     cout << endl;
  80.     for(int i = 1; i <= 10; i++) printf("Parent of %d is %d\n", i, parent[i]);
  81.  
  82.  
  83.  
  84.  
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement