Skip to main content
LeetCode 882, Hard. Topics: Graph Theory, Heap (Priority Queue), Shortest Path, Dijkstra’s Algorithm. View on LeetCode. Generate this problem as a practice environment: tested reference solution, 22 parametrized pytest cases, and a playground notebook:

Problem

You are given an undirected graph (the “original graph”) with n nodes labeled from 0 to n - 1. You decide to subdivide each edge in the graph into a chain of nodes, with the number of new nodes varying between each edge. The graph is given as a 2D array of edges where edges[i] = [u<sub>i</sub>, v<sub>i</sub>, cnt<sub>i</sub>] indicates that there is an edge between nodes u<sub>i</sub> and v<sub>i</sub> in the original graph, and cnt<sub>i</sub> is the total number of new nodes that you will subdivide the edge into. Note that cnt<sub>i</sub> == 0 means you will not subdivide the edge. To subdivide the edge [u<sub>i</sub>, v<sub>i</sub>], replace it with (cnt<sub>i</sub> + 1) new edges and cnt<sub>i</sub> new nodes. The new nodes are x<sub>1</sub>, x<sub>2</sub>, …, x<sub>cnt<sub>i</sub></sub>, and the new edges are [u<sub>i</sub>, x<sub>1</sub>], [x<sub>1</sub>, x<sub>2</sub>], [x<sub>2</sub>, x<sub>3</sub>], …, [x<sub>cnt<sub>i</sub>-1</sub>, x<sub>cnt<sub>i</sub></sub>], [x<sub>cnt<sub>i</sub></sub>, v<sub>i</sub>]. In this new graph, you want to know how many nodes are reachable from the node 0, where a node is reachable if the distance is maxMoves or less. Given the original graph and maxMoves, return the number of nodes that are reachable from node 0 in the new graph.

Examples

Example 1

Constraints

  • 0 <= edges.length <= min(n * (n - 1) / 2, 10<sup>4</sup>)
  • edges[i].length == 3
  • 0 <= u<sub>i</sub> < v<sub>i</sub> < n
  • There are no multiple edges in the graph.
  • 0 <= cnt<sub>i</sub> <= 10<sup>4</sup>
  • 0 <= maxMoves <= 10<sup>9</sup>
  • 1 <= n <= 3000

Solution

Reference implementation from solution.py on GitHub, full suite in test_solution.py:

Complexity

Tags

Last modified on September 7, 2026