Advertisement
daegron

disjoint sets

Nov 24th, 2021
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.07 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4.  
  5.  
  6. class Main {
  7.     private static void solve(int n, int m, long[] ranks, int[][] arr){
  8.         disJointSet a = new disJointSet(n);
  9.         a.values = ranks;
  10.         a.getMax();
  11.         for (int i = 0; i < m; i++) {
  12.             a.union(arr[i][0], arr[i][1]);
  13.             System.out.println(a.max);
  14.         }
  15.     }
  16.  
  17.     public static void main(String[] args) throws IOException {
  18.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  19.         String[] b = br.readLine().split(" ");
  20.  
  21.         int n = Integer.parseInt(b[0]);
  22.         int m = Integer.parseInt(b[1]);
  23.  
  24.         long[] ranks = new long[n];
  25.         int[][] arr = new int[m][];
  26.  
  27.         String[] c = br.readLine().split(" ");
  28.  
  29.         for (int i = 0; i < n; i++) {
  30.             ranks[i] = Long.parseLong(c[i]);
  31.         }
  32.         for (int i = 0; i < m; i++) {
  33.             String[] a = br.readLine().split(" ");
  34.             arr[i] = new int[]{Integer.parseInt(a[0]) - 1, Integer.parseInt(a[1]) - 1};
  35.         }
  36.         solve(n, m, ranks, arr);
  37.     }
  38. }
  39.  
  40. class disJointSet {
  41.     int[] parent;
  42.     long[] values;
  43.     int n;
  44.     long max;
  45.  
  46.     public void getMax() {
  47.         long max = Integer.MIN_VALUE;
  48.         for (int i = 0; i < n; i++) {
  49.             if (values[i] > max){
  50.                 max =  values[i];
  51.             }
  52.         }
  53.         this.max = max;
  54.     }
  55.  
  56.     public disJointSet(int n) {
  57.  
  58.         parent = new int[n];
  59.         this.n = n;
  60.         makeSet();
  61.  
  62.     }
  63.  
  64.     public void makeSet() {
  65.  
  66.         for (int i = 0; i < n; i++) {
  67.             parent[i] = i;
  68.         }
  69.  
  70.     }
  71.  
  72.     public int find(int i) {
  73.  
  74.         if (i != parent[i]) parent[i] = find(parent[i]);
  75.         return parent[i];
  76.  
  77.     }
  78.  
  79.     public void union(int i, int j) {
  80.  
  81.         int iID = find(i);
  82.         int jID = find(j);
  83.  
  84.         if (iID == jID) return;
  85.  
  86.         values[j] += values[i];
  87.         parent[jID] = iID;
  88.         if (values[j] > max)
  89.             max = values[j];
  90.     }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement