public int maximumDetonation(int[][] bombs) {
        int n = bombs.length;
        List<Integer>[] G = new List[n];
        for (int i = 0; i < n; i++) {
            G[i] = new ArrayList<>();
        }
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                long dist = ((long)bombs[i][0] - bombs[j][0]) * (bombs[i][0] - bombs[j][0]) + (bombs[i][1] - bombs[j][1]) * (bombs[i][1] - bombs[j][1]);
                if ((long)bombs[i][2] * bombs[i][2] >= dist) {
                    G[i].add(j);
                }
                if ((long)bombs[j][2] * bombs[j][2] >= dist) {
                    G[j].add(i);
                }
            }
        }
        int ans = 0;

        for (int i = 0; i < n; i++) {
            ans = Math.max(ans, bfs(G, i));
        }

        return ans;
    }

    private int bfs(List<Integer>[] G, int start) {
        int n = G.length;
        boolean[] marked = new boolean[n];
        int ans = 0;
        Queue<Integer> q = new LinkedList<>();
        q.add(start);
        marked[start] = true;
        while (!q.isEmpty()) {
            int size = q.size();
            for (int i = 0; i < size; i++) {
                int v = q.poll();
                ans++;
                for (int w : G[v]) {
                    if (!marked[w]) {
                        marked[w] = true;
                        q.add(w);
                    }
                }
            }

        }
        return ans;
    }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.