Dijkstra's algorithm needs: (1) a graph representation via Adjacency List for efficient neighbor access, (2) a Heap (typically min-heap) to efficiently extract the vertex with minimum distance in O(log V), and (3) a structure to manage visited/unvisited vertices or frontier, typically implemented via Queue or priority queue. Option B has all essential components.