AlgoMaster Logo

924. Minimize Malware Spread

graph=[[1,1,0],[1,1,0],[0,0,1]],initial=[0,1]
1class Solution {
2    int[] parent, size;
3
4    public int minMalwareSpread(int[][] graph, int[] initial) {
5        int n = graph.length;
6        parent = new int[n];
7        size = new int[n];
8
9        // Initialize Union-Find
10        for (int i = 0; i < n; i++) {
11            parent[i] = i;
12            size[i] = 1;
13        }
14
15        // Build components from adjacency matrix
16        for (int i = 0; i < n; i++) {
17            for (int j = i + 1; j < n; j++) {
18                if (graph[i][j] == 1) {
19                    union(i, j);
20                }
21            }
22        }
23
24        // Count infected nodes per component
25        Map<Integer, List<Integer>> infected = new HashMap<>();
26        for (int node : initial) {
27            int root = find(node);
28            infected.computeIfAbsent(root, k -> new ArrayList<>()).add(node);
29        }
30
31        // Find best node to remove
32        Arrays.sort(initial);
33        int bestNode = initial[0];
34        int maxSaved = 0;
35
36        for (int node : initial) {
37            int root = find(node);
38            List<Integer> list = infected.get(root);
39
40            if (list.size() == 1) {
41                int saved = size[root];
42                if (saved > maxSaved || (saved == maxSaved && node < bestNode)) {
43                    maxSaved = saved;
44                    bestNode = node;
45                }
46            }
47        }
48
49        return bestNode;
50    }
51
52    int find(int x) {
53        if (parent[x] != x) parent[x] = find(parent[x]);
54        return parent[x];
55    }
56
57    void union(int x, int y) {
58        int px = find(x), py = find(y);
59        if (px != py) {
60            if (size[px] < size[py]) { int t = px; px = py; py = t; }
61            parent[py] = px;
62            size[px] += size[py];
63        }
64    }
65}
0 / 9
Network Graph012Infected Nodes: [0, 1]Union-Find ComponentsLegend:HealthyInfectedAnalyzingBest Choice