#include<bits/stdc++.h>usingnamespacestd;constintMAX=1e5;intparent[MAX];intrank_[MAX];voidmakeSet(intx){parent[x]=x;rank_[x]=0;}intfind(intx){if(parent[x]!=x){parent[x]=find(parent[x]);// Path compression}returnparent[x];}voidunionSets(intx,inty){intxRoot=find(x);intyRoot=find(y);// Union by rankif(rank_[xRoot]<rank_[yRoot]){parent[xRoot]=yRoot;}elseif(rank_[xRoot]>rank_[yRoot]){parent[yRoot]=xRoot;}else{parent[yRoot]=xRoot;rank_[xRoot]=rank_[xRoot]+1;}}intmain(){for(inti=0;i<MAX;i++){makeSet(i);}// Add unions as required// unionSets(a, b);return0;}
#include<bits/stdc++.h>usingnamespacestd;constintMAX=10;intparent[MAX];intrank_[MAX];voidmakeSet(intx){parent[x]=x;rank_[x]=0;}intfind(intx){if(parent[x]!=x){parent[x]=find(parent[x]);// Path compression}returnparent[x];}voidunionSets(intx,inty){intxRoot=find(x);intyRoot=find(y);// Union by rankif(rank_[xRoot]<rank_[yRoot]){parent[xRoot]=yRoot;}elseif(rank_[xRoot]>rank_[yRoot]){parent[yRoot]=xRoot;}else{parent[yRoot]=xRoot;rank_[xRoot]=rank_[xRoot]+1;}}intmain(){for(inti=0;i<MAX;i++){makeSet(i);}unionSets(1,2);unionSets(3,4);unionSets(1,3);unionSets(5,6);for(inti=0;i<MAX;i++){cout<<"Element: "<<i<<" set: "<<find(i)<<endl;}return0;}
#include<bits/stdc++.h>usingnamespacestd;constintMAX=10000;intparent[MAX];voidmakeSet(intx){parent[x]=x;}intfindSet(intx){if(x!=parent[x]){parent[x]=findSet(parent[x]);}returnparent[x];}voidunionSets(intx,inty){intxRoot=findSet(x);intyRoot=findSet(y);if(xRoot!=yRoot){parent[xRoot]=yRoot;}}boolisConnected(intx,inty){returnfindSet(x)==findSet(y);}intmain(){for(inti=0;i<MAX;i++){makeSet(i);}unionSets(1,2);unionSets(2,3);unionSets(4,5);cout<<"1 and 3 are connected: "<<(isConnected(1,3)?"Yes":"No")<<endl;cout<<"1 and 4 are connected: "<<(isConnected(1,4)?"Yes":"No")<<endl;return0;}
#include<bits/stdc++.h>usingnamespacestd;constintMAX=100;intvisited[MAX][MAX];vector<vector<int>>image;// Assume this is given// These arrays are used to get row and column numbers of 4 neighbours of a given cellintdx[]={-1,0,1,0};intdy[]={0,1,0,-1};// A function to check if a given cell (row, col) can be included in DFSboolisSafe(introw,intcol,intprevColor){return(row>=0)&&(row<image.size())&&(col>=0)&&(col<image[0].size())&&(image[row][col]==prevColor)&&!visited[row][col];}voiddfs(introw,intcol,intprevColor){visited[row][col]=1;// Recur for all connected neighboursfor(intk=0;k<4;++k){if(isSafe(row+dx[k],col+dy[k],prevColor)){dfs(row+dx[k],col+dy[k],prevColor);}}}intmain(){intstartRow=0,startCol=0;// Assume these are givenmemset(visited,0,sizeof(visited));dfs(startRow,startCol,image[startRow][startCol]);return0;}
#include<bits/stdc++.h>usingnamespacestd;constintMAX=10000;vector<int>parent(MAX);vector<vector<int>>image;// Assume this is given// Initialize the disjoint setvoidmakeSet(intv){parent[v]=v;}// Find the root of the set that element v belongs tointfindSet(intv){if(v==parent[v])returnv;returnparent[v]=findSet(parent[v]);// Path compression}// Union two setsvoidunionSets(inta,intb){a=findSet(a);b=findSet(b);if(a!=b){parent[b]=a;}}// Check if two elements are in the same setboolisConnected(inta,intb){returnfindSet(a)==findSet(b);}voidconnectPixels(){intn=image.size(),m=image[0].size();for(inti=0;i<n;++i){for(intj=0;j<m;++j){if(i>0&&image[i][j]==image[i-1][j])unionSets(i*m+j,(i-1)*m+j);if(j>0&&image[i][j]==image[i][j-1])unionSets(i*m+j,i*m+(j-1));}}}intmain(){for(inti=0;i<MAX;++i){makeSet(i);}// Assume the image is givenconnectPixels();// Now we can check if any two pixels are connected in constant timecout<<isConnected(0,1)<<"\n";cout<<isConnected(1,2)<<"\n";return0;}
#include<bits/stdc++.h>usingnamespacestd;constintMAX=10000;vector<int>parent(MAX),rank_(MAX);// Initialize the disjoint setvoidmakeSet(intv){parent[v]=v;rank_[v]=0;}// Find the root of the set that element v belongs tointfindSet(intv){if(v==parent[v])returnv;returnparent[v]=findSet(parent[v]);// Path compression}// Union two setsvoidunionSets(inta,intb){a=findSet(a);b=findSet(b);if(a!=b){if(rank_[a]<rank_[b])swap(a,b);parent[b]=a;if(rank_[a]==rank_[b])++rank_[a];}}intmain(){for(inti=0;i<MAX;++i){makeSet(i);}// Assume we have some pairs of equivalent elementsvector<pair<int,int>>equivalentPairs={{1,2},{2,3},{4,5},{6,7},{8,9}};// Merge equivalent pairsfor(autopair:equivalentPairs){unionSets(pair.first,pair.second);}// Now each disjoint set represents an equivalence class// We can use findSet to determine the equivalence class of an elementcout<<findSet(2)<<"\n";// Output: 1cout<<findSet(5)<<"\n";// Output: 4return0;}