# code tpl {%hackmd theme-dark %} city A city B [10:00, 14:00] city B city D [14:00, 16:00] city K to city P city A to city D A -> B (14:00) -> B (14:00) -> D(16:00) A -> B (10, 14) A -> C (9, 12) B->D (13, 15) C->X (12, 13) C->D (11, 15) X->D (14, 18) A -> B, C B -> D C -> X, D B, C => minHeap(X) X: 13 Situation Task Action Result ```cpp= // trains: [[0, 1, 10, 14], [0, 2, 9, 15], [1, 2, 14, 18]], [cityA, cityB, depart, arrive] // V citys // E schedules // TC: O(V + ElogV) VlogE bool arrive(vector<vector<int>> &schedules, int src, int dst) { // [0, 1, 10, 14], [0, 2, 9, 12], [1, 3, 13, 15], [2, 9, 12, 13], [9, 3, 14, 18] // src: 0, dst: 3 // construct graph unordered_map<int, vector<vector<int>>> graph; // src city: [depart, arrive, next] for (auto &schedule: schedules) { int startStation = schedule[0]; int nextStation = schedule[1]; int departTime = schedule[2]; int arriveTime = schedule[3]; graph[start].push_back({departTime, arriveTime, nextStation}); } // 0: [10, 14, 1], [9, 12, 2] // 1: [13, 15, 3] // 2: [12, 13, 9] // 9: [14, 18, 3] // [depart time, arrive time, next station] priority_queue<vector<int>, vector<vector<int>>, greater<vector<int>>> minHeap; minHeap.push({0,0, src}); // [[0, 0, 0]] while (!minHeap.empty()) { int departTime = minHeap.top()[0]; // 10 int arriveTime = minHeap.top()[1]; // 14 int station = minHeap.top()[2]; // 1 minHeap.pop(); //[[10, 14, 1]] if (station == dst) { // 2 != 3 return true; } for (auto &schedule: graph[station]) { //[13, 15, 3] int depart = schedule[0]; // 13 int arrive = schedule[1]; // 15 int nextStation = schedule[2];// 3 if (depart >= arriveTime) { minHeap.push({depart, arrive, nextStation}); // [[12, 13, 9]] } } } return false; // run Dijkstra's Algorithms - alog } M: ``` node i : -1 root x x|i i-1(i-1)|y x|j j-2(j-2)|y x| x| -1| ###### tags: `mock interview` `面試`