Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- class Main {
- private static void solve(int n, int m, long[] ranks, int[][] arr){
- disJointSet a = new disJointSet(n);
- a.values = ranks;
- a.getMax();
- for (int i = 0; i < m; i++) {
- a.union(arr[i][0], arr[i][1]);
- System.out.println(a.max);
- }
- }
- public static void main(String[] args) throws IOException {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String[] b = br.readLine().split(" ");
- int n = Integer.parseInt(b[0]);
- int m = Integer.parseInt(b[1]);
- long[] ranks = new long[n];
- int[][] arr = new int[m][];
- String[] c = br.readLine().split(" ");
- for (int i = 0; i < n; i++) {
- ranks[i] = Long.parseLong(c[i]);
- }
- for (int i = 0; i < m; i++) {
- String[] a = br.readLine().split(" ");
- arr[i] = new int[]{Integer.parseInt(a[0]) - 1, Integer.parseInt(a[1]) - 1};
- }
- solve(n, m, ranks, arr);
- }
- }
- class disJointSet {
- int[] parent;
- long[] values;
- int n;
- long max;
- public void getMax() {
- long max = Integer.MIN_VALUE;
- for (int i = 0; i < n; i++) {
- if (values[i] > max){
- max = values[i];
- }
- }
- this.max = max;
- }
- public disJointSet(int n) {
- parent = new int[n];
- this.n = n;
- makeSet();
- }
- public void makeSet() {
- for (int i = 0; i < n; i++) {
- parent[i] = i;
- }
- }
- public int find(int i) {
- if (i != parent[i]) parent[i] = find(parent[i]);
- return parent[i];
- }
- public void union(int i, int j) {
- int iID = find(i);
- int jID = find(j);
- if (iID == jID) return;
- values[j] += values[i];
- parent[jID] = iID;
- if (values[j] > max)
- max = values[j];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement