DSU

 avatar
unknown
java
18 days ago
858 B
3
Indexable
class DSU {
  int[] parent;
  int[] weight;

  DSU(int n) {
    this.parent = new int[n];
    for(int idx = 0; idx < n; idx++) {
      parent[idx] = idx;
    }

    this.weight = new int[n];
    for(int idx = 0; idx < n; idx++) {
      weight[idx] = 1;
    }
  }

  // path compression
  int find(int idx) {
    if(parent[idx] == idx) return idx;
    return parent[idx] = find(parent[idx]);
  }

  // weight compression
  void union(int a, int b) {
    int pa = find(a);
    int pb = find(b);

    if(pa == pb) return;
    
    if(weight[pa] > weight[pb]) {
      parent[pb] = pa;
      weight[pa] += weight[pb];
    }
    else {
      parent[pa] = pb;
      weight[pb] += weight[pa];
    }
  }
}

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
Leave a Comment