Minimize Malware Spread LeetCode solution in Java
1class Solution {2int[] parent;3int[] size;45public int minMalwareSpread(int[][] graph, int[] initial) {6parent = new int[graph.length];7size = new int[graph.length];8for (int i = 0; i < parent.length; i++) {9parent[i] = i;10size[i] = 1;11}1213for (int i = 0; i < graph.length; i++) {14for (int j = 0; j < graph[0].length; j++) {15if (i != j && graph[i][j] == 1) {16unionHelper(i, j);17}18}19}2021int[] imap = new int[graph.length];22for (int val : initial) {23int ri = find(val);24imap[ri]++;25}2627int ans_i = -1;28int ans_size = 0;29for (int i : initial) {30int ri = find(i);31if (imap[ri] == 1) {32if (ans_i == -1) {33ans_i = i;34ans_size = size[ri];35} else if (size[ri] > ans_size) {36ans_i = i;37ans_size = size[ri];38} else if (size[ri] == ans_size) {39if (i < ans_i) {40ans_i = i;41ans_size = size[ri];42}43}44}45}4647if (ans_i == -1) {48ans_i = graph.length;49for (int i : initial) {50if (i < ans_i) {51ans_i = i;52}53}54}5556return ans_i;57}5859int find(int x) {60if (parent[x] == x) {61return x;62} else {63parent[x] = find(parent[x]);64return parent[x];65}66}6768void unionHelper(int x, int y) {69int xl = find(x);70int yl = find(y);7172if (size[xl] < size[yl]) {73parent[xl] = yl;74size[yl] += size[xl];75} else {76parent[yl] = xl;77size[xl] += size[yl];78}79}80}