Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <climits>
- struct Edge {
- int from, to, time_in, time_out;
- Edge() : from(0), to(0), time_in(0), time_out(0) {};
- Edge(int _from, int _time_in, int _to, int _time_out) : from(_from), to(_to), time_in(_time_in), time_out(_time_out) {};
- };
- class Graph {
- const int INF = INT_MAX/2;
- std::vector<Edge> edges;
- std::vector<int> moment;
- public:
- Graph(int vertexes) : moment(vertexes, INF) {};
- void AddEdge (int v, int time_in, int u, int time_out) {
- edges.push_back(Edge(v, time_in, u, time_out));
- }
- int shortestDistance (int start, int finish) {
- moment[start] = 0;
- for (int i = 0; i < edges.size(); ++i) {
- for (Edge e : edges) {
- if (moment[e.from] > e.time_in) {
- continue;
- }
- if (e.time_out < moment[e.to] && moment[e.from] != INF) {
- moment[e.to] = e.time_out;
- }
- }
- }
- return moment[finish];
- }
- };
- int main() {
- int n;
- std::cin >> n;
- Graph g(n);
- int start, finish;
- std::cin >> start >> finish;
- int k;
- std::cin >> k;
- for (int i = 0; i < k; ++i) {
- int departure, arrival, time_in, time_out;
- std::cin >> departure >> time_in >> arrival >> time_out;
- g.AddEdge(--departure, time_in, --arrival, time_out);
- }
- std::cout << g.shortestDistance(--start, --finish) << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement