Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- void MakeSet(int);
- int Find(int);
- bool Same_Component(int, int);
- void Union(int, int);
- void UnionRank(int, int);
- int Components(int);
- int nNodes(int, int);
- int parent[100005];
- int root[100005];
- int rank[100005];
- int nodes[100005];
- int main() {
- }
- void MakeSet(int n) {
- for(int i=0;i<n;i++) {
- parent[i] = i;
- rank[i] = 0;
- }
- }
- int Find(int x) {
- if(x != parent[x]) return parent[x] = Find(parent[x]);
- return x;
- }
- bool Same_Component(int x, int y) {
- if(Find(x) == Find(y)) return true;
- return false;
- }
- void Union(int x, int y) {
- int xroot = Find(x);
- int yroot = Find(y);
- if(rank[xroot] > rank[yroot]) parent[yroot] = xroot;
- else {
- parent[xroot] = yroot;
- if(rank[xroot] == rank[yroot]) rank[yroot]++;
- }
- }
- int Components(int n) {
- int nComponents = 0;
- for(int i=0;i<n;i++) {
- if(Find(i) == i) {
- root[nComponents] = i;
- nComponents++;
- }
- }
- return nComponents;
- }
- int nNodes(int n, int c) {
- for(int i=0;i<n;i++) nodes[i] = 0;
- for(int i=0;i<n;i++) {
- nodes[Find(i)]++;
- }
- return nodes[c];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement