#include <stack>
#include <vector>
class Solution {
public:
bool canVisitAllRooms(vector<vector<int>>& rooms) {
std::stack<int> s;
// Lookups
std::vector<bool> visited(rooms.size(), false);
std::vector<bool> inStack(rooms.size(), false);
int totalVisited = 0;
inStack[0] = true;
s.push(0);
while (!s.empty()) {
int currentRoom = s.top();
s.pop();
visited[currentRoom] = true;
totalVisited++;
for (int i = 0; i < rooms[currentRoom].size(); i++) {
if (!inStack[rooms[currentRoom][i]] && !visited[rooms[currentRoom][i]]) {
s.push(rooms[currentRoom][i]);
inStack[rooms[currentRoom][i]] = true;
}
}
}
return (totalVisited == rooms.size());
}
};