Train Schedule
class Schedule {
int startTime;
string A;
int endTime;
string B;
};Solution (!untested!)
using pis = pair<int, string>;
int earliestTimeArrival(vector<Schedule> schedules, int T1, string start, string destination) {
unordered_map<string, vector<Schedule>> g; // start point -> list of schedule start at this point
priority_queue<pis, vector<pis>, greater<pis>()> pq; // time, stop
unordered_map<string, int> minArrival; // min distance map
minArrival[start] = T1;
pq.push({T1, start});
while(!pq.empty()) {
auto [dis, cur] = pq.top();
pq.pop();
if (cur==destination)
break;
for (auto s: g[cur]) {
auto& [st, a, et, b] = s;
if (cur > st) // the train has left before current time
continue;
// update the earliest time arrive at station b
if (minArrival.find(b)!=minArrival.end() && minArrival[b]<=cur)
continue;
minArrival[b] = et;
pq.push({b, et});
}
}
return minArrival.find(destination)==minArrival.end()? -1: minArrival[destination];
}Last updated